我想在一个数组中找到所有不同的三元组(a,b,c),使得 a + b + c = 0。
我在 java 中实现了该算法,但是当输入很大时(例如 100,000 个零等),我得到了 TLE。
对于 100,000 个零,它应该只输出 (0, 0, 0)。
有人可以就如何加快速度提供一些想法吗?
下面是我写的函数。它将一个数组作为输入并返回所有具有所需属性的唯一三元组作为列表。
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> ll = new ArrayList<List<Integer>>();
for(int i = 0; i < nums.length - 1; i++){
int x = nums[i];
int start = i + 1;
int end = nums.length - 1;
int sum = -x;
while(start < end){
int y = nums[start] + nums[end];
if(y == sum){
List<Integer> list = new ArrayList<Integer>();
list.add(nums[start]);
list.add(nums[end]);
list.add(x);
Collections.sort(list);
ll.add(list);
}
if(y < sum)
start++;
else
end--;
}
}
return ll.stream()
.distinct()
.collect(Collectors.toList());
}
料青山看我应如是
MMTTMM
哈士奇WWW
慕沐林林
相关分类