返回信息流没事做做leetcode,3sum这个问题。(https://leetcode.com/problems/3sum/)
我的写法是这样的。
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> results = new ArrayList<List<Integer>>();
int flag = 0;
int temp, start, end, sum;
for (; flag < nums.length - 2; flag++){
start = flag + 1;
end = nums.length - 1;
temp = nums[flag];
while (start < end){
sum = temp + nums[start] + nums[end];
if (sum == 0){
if (!results.contains(Arrays.asList(temp, nums[start], nums[end])))
results.add(Arrays.asList(temp, nums[start], nums[end]));
start++;
end--;
}
else if (sum < 0)
start++;
else
end--;
}
}
return results;
}
}
感觉跟讨论区的做法差不多,但leetcode就是报超时,在自己ide上都没问题,求解。
这是一条镜像帖。来源:北邮人论坛 / java / #49934同步于 2016/5/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
这个代码为啥会超时?
lbjboat
2016/5/3镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我问的是为啥会超时,同样是O(n^2)复杂度,IDE运行也都是正常的,而且并没有感觉慢。把锅扔给java也是醉了。
【 在 dongqing 的大作中提到: 】
: Java程序运行慢
改成这样就AC了
while (start < end){
sum = temp + nums[start] + nums[end];
if (sum == 0){
List<Integer> list = Arrays.asList(temp,nums[start],nums[end]);
if (!results.contains(list))
results.add(list);
start++;
end--;
}
else if (sum < 0)
start++;
else
end--;
}
【 在 lbjboat 的大作中提到: 】
: 我问的是为啥会超时,同样是O(n^2)复杂度,IDE运行也都是正常的,而且并没有感觉慢。把锅扔给java也是醉了。
好吧。
第一我只是想知道为什么?我对AC这个结果并不在意,要只是AC我看discuss就行了;
第二我试了你改的那一行,并不会AC,就改那一点也不应该AC,要AC我就该疯了。
最后,还是多谢你了,别再浪费彼此的时间了。
【 在 dongqing 的大作中提到: 】
: 改成这样就AC了
: while (start < end){
: sum = temp + nums[start] + nums[end];
: ...................
有时AC,有时out[ema17][ema17]
【 在 lbjboat 的大作中提到: 】
: 好吧。
: 第一我只是想知道为什么?我对AC这个结果并不在意,要只是AC我看discuss就行了;
: 第二我试了你改的那一行,并不会AC,就改那一点也不应该AC,要AC我就该疯了。
: ...................
哦哦,谢了,原来是这个
【 在 ml3615556 (Andy) 的大作中提到: 】
: 为啥是O(n^2)呢?
: contains的复杂度是O(n)啊,又不是hash的O(1)