我正在尝试编写一个代码来查找一个三元组,其总和等于给定目标,使用列表列表但是它会抛出错误。我尝试在IntelliJ和Eclipse中增加堆大小,但它仍然会抛出错误。 以下是我的代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TripleSum {
public List<List<Integer>> findNumbers(int[] nums, int target){
Arrays.sort(nums);
List<List<Integer>> al = new ArrayList<List<Integer>>();
ArrayList<Integer> lst = new ArrayList<>();
int l, r;
int n = nums.length;
for(int i=0; i<n; i++){
l=i+1;
r= n-1;
while(l<r){
if(nums[i]+nums[l]+nums[r]==target){
lst.add(nums[i]);
//lst.add(l);
//lst.add(r);
}
else if(nums[i]+nums[l]+nums[r]<target)
l++;
else
r--;
}
al.add(lst);
}
return al;
}
public static void main(String[] args){
int[] arr = {12, 3, 4, 1, 6, 9, 6};
TripleSum ts = new TripleSum();
System.out.println(ts.findNumbers(arr, 24));
}
}
答案 0 :(得分:1)
我没有运行调试器,但我怀疑你的问题出现在这段代码中:
while(l<r){
if(nums[i]+nums[l]+nums[r]==target){
lst.add(nums[i]);
//lst.add(l);
//lst.add(r);
}
else if(nums[i]+nums[l]+nums[r]<target)
l++;
else
r--;
}
我们现在说l < r
是正确的。现在让我们也说nums[i]+nums[l]+nums[r]==target
为真 - 因此我们会将nums[i]
添加到lst
变量。
跳过else块。
然后循环循环,变量没有改变。你将永远循环。并永远添加。当然,在你崩溃的地方,你的空间不足。