代码抛出线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间

时间:2018-03-12 15:34:52

标签: java intellij-idea

我正在尝试编写一个代码来查找一个三元组,其总和等于给定目标,使用列表列表但是它会抛出错误。我尝试在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));
    }
}

1 个答案:

答案 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块。

然后循环循环,变量没有改变。你将永远循环。并永远添加。当然,在你崩溃的地方,你的空间不足。