Я пытаюсь написать код, чтобы найти триплет, сумма которого равна заданной цели, используя список списков, но он выдает ошибку. Я попытался увеличить размер кучи в 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));
}
}
пытаетесь найти единую сумму из 3 чисел или все возможные комбинации из 3 чисел в списке, которые соответствуют вашей цели?




Я не запускал отладчик, но подозреваю, что ваша проблема в этом коде:
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 пропускаются.
Затем цикл зацикливается, и переменные не меняются. Вы будете зацикливаться навсегда. И добавить навсегда. До тех пор, пока, конечно, у вас не закончится место, где вы рухнете.
Я рекомендую использовать переменные, на которые вы никогда не смотрите и не задаетесь вопросом, "что делает эта переменная?" - это значительно упрощает отладку.