请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

我反复测试了,优化后测试结果基本上比优化前还慢?什么原因呢?

基本测试都是优化后比优化前还慢,偶尔优化后会快。为什么呢?

附图

https://chrome.google.com/webstore/

https://img1.sycdn.imooc.com//szimg/5ab725070001e95919200984.jpg

https://img1.sycdn.imooc.com//szimg/5ab7250700017fbf19200984.jpg


正在回答 回答被采纳积分+3

3回答

KimZing 2018-03-26 14:34:15

优化前

//img1.sycdn.imooc.com//szimg/5ab893dc0001befb09920643.jpg


优化后

//img1.sycdn.imooc.com//szimg/5ab893f700011ebd08410639.jpg


用的是你的同样的代码,性能是有提升的,我的:go version: 1.10   电脑配置:i7 2.2GHZ 内存: 16G,

代码应该是没问题的,希望对你有所帮助。

0 回复 有任何疑惑可以回复我~
  • 提问者 弱弱小乖乖 #1
    你有反复测试了么,我是反复测试了,偶尔的确是优化后快,但是基本还是优化前更快,我机子i7-7700, 8g内存的。我晚上再回去调试看下
    回复 有任何疑惑可以回复我~ 2018-03-26 14:36:37
  • KimZing 回复 提问者 弱弱小乖乖 #2
    我试试
    回复 有任何疑惑可以回复我~ 2018-03-26 14:37:20
  • KimZing 回复 提问者 弱弱小乖乖 #3
    测了四组:
    优化前:1.18 1.20 1.18 1.15
    
    优化后:0.58 0.63 0.86 0.87
    回复 有任何疑惑可以回复我~ 2018-03-26 14:45:38
提问者 弱弱小乖乖 2018-03-26 14:17:15
func BenchmarkSubstr(b *testing.B) {
   s := "黑化肥挥发发挥灰化肥挥发发黑会飞话"
   maxLength := 8
   for i := 0; i < 11; i++ {
      s = s + s
   }
   //b.Logf("len(s) = %d", len(s))

   b.ResetTimer()
   // b.N = 4000000
   for i := 0; i < b.N; i++ {
      actual := nonRepeatingStr(s)
      if actual != maxLength {
         b.Errorf("got %d for input %s; expected %d", actual, s, maxLength)
      }
   }

}


package main

import (
   "fmt"
)

var lastOccurred = make([]int, 0xffff) // 空间换时间 65535; lastOccurred[0x65]
func nonRepeatingStr(s string) int {
   // 每个字母最后出现的位置
   //lastOccurred := make(map[rune]int)

   for i := range lastOccurred {
      lastOccurred[i] = -1
   }

   // 子字符串开始的位置
   start := 0

   // 子字符串的长度
   maxLength := 0
   for i, ch := range []rune(s) {
      // 当前字符,从开始位置,如果出现过;开始位置从当前字符出现过的位置+1
      //if lastI, ok := lastOccurred[ch]; ok && lastI >= start {
      if lastI := lastOccurred[ch]; lastI != -1 && lastI >= start {
         start = lastOccurred[ch] + 1
      }

      if i-start+1 > maxLength {
         maxLength = i - start + 1
      }
      lastOccurred[ch] = i
   }
   return maxLength
}


0 回复 有任何疑惑可以回复我~
KimZing 2018-03-26 13:34:49
你只贴了这个图,老师应该也没有办法回答你。作为程序员,还是学学如何提问的艺术吧
0 回复 有任何疑惑可以回复我~
  • 提问者 弱弱小乖乖 #1
    代码就是跟着老师敲的啊,就算贴代码有什么用
    回复 有任何疑惑可以回复我~ 2018-03-26 14:04:09
  • KimZing 回复 提问者 弱弱小乖乖 #2
    说不定你会有什么遗漏的细节,或者环境有差异
    回复 有任何疑惑可以回复我~ 2018-03-26 14:10:49
  • 提问者 弱弱小乖乖 回复 KimZing #3
    你的想法本身也没错,我也把代码追加了
    回复 有任何疑惑可以回复我~ 2018-03-26 14:18:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信