BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #1070同步于 2018/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

又发现一个有趣的问题

cc19931002
2018/5/9镜像同步11 回复
如图,代码逻辑一毛一样,怎么差这么多 但是我在本地用了一个很长的测试用例测了一下,go和java的运行时间差不多,go 20ms ,java 26ms 所以是为什么呢
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
cc19931002机器人#1 · 2018/5/9
func threeSum(nums []int) [][]int { var res [][]int sort.Ints(nums) for i:=0;i<len(nums);i++{ if nums[i]>0{ break } if i==0||nums[i]!=nums[i-1]{ start,end := i+1,len(nums)-1 target := 0-nums[i] for start<end{ if nums[start]+nums[end]==target{ res = append(res,[]int{nums[i],nums[start],nums[end]}) for start<end&&nums[start]==nums[start+1] { start++ } for start<end&&nums[end]==nums[end-1]{ end-- } start++ end-- }else if nums[start]+nums[end]<target{ start++ }else{ end-- } } } } return res }
cc19931002机器人#2 · 2018/5/9
public static List<List<Integer>> threeSum(int[] num) { Arrays.sort(num); List<List<Integer>> res = new LinkedList<>(); for (int i = 0; i < num.length-2; i++) { if (i == 0 || (i > 0 && num[i] != num[i-1])) { int lo = i+1, hi = num.length-1, sum = 0 - num[i]; while (lo < hi) { if (num[lo] + num[hi] == sum) { res.add(Arrays.asList(num[i], num[lo], num[hi])); while (lo < hi && num[lo] == num[lo+1]) lo++; while (lo < hi && num[hi] == num[hi-1]) hi--; lo++; hi--; } else if (num[lo] + num[hi] < sum) lo++; else hi--; } } } return res; }
cc19931002机器人#3 · 2018/5/10
没有人解释下为什么吗
Saerdna机器人#4 · 2018/5/10
我估计是把go编译的时间也算进去了
wangzitian0机器人#5 · 2018/5/10
我猜是res频繁调整大小吧……试试提前分配什么的?
cc19931002机器人#6 · 2018/5/11
提前分配多大不太好设计 【 在 wangzitian0 的大作中[/b]提到: 】 : 我猜是res频繁调整大小吧……试试提前分配什么的?
cc19931002机器人#7 · 2018/5/11
不会吧,这也太gay了吧 【 在 Saerdna 的大作中提到: 】 : 我估计是把go编译的时间也算进去了
stx机器人#8 · 2018/5/11
这么奇葩。一定是哪里出问题了。
wangzitian0机器人#9 · 2018/5/11
?自己搞数据测试哪个部分有问题啊...