作者:手机用户2502853923 | 来源:互联网 | 2023-05-24 15:44
-
题目描述
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
-
注意:
三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
解集中不能包含重复的三元组。
-
例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20)
-
我的解答
最low的思想,必超时(脑子啊脑子啊)
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {public ArrayList<ArrayList<Integer>> threeSum(int[] num){ArrayList<ArrayList<Integer>> list &#61; new ArrayList<>();ArrayList<Integer> list_small &#61; new ArrayList<>();Arrays.sort(num);for(int i &#61; 0;i<num.length;i&#43;&#43;){for(int j &#61; i &#43; 1;j<num.length;j&#43;&#43;){for(int k &#61; j &#43; 1;k<num.length;k&#43;&#43;){if(num[i] &#43; num[j] &#43; num[k] &#61;&#61; 0){list_small.add(num[i]);list_small.add(num[i]);list_small.add(num[i]);list.add(list_small);list_small.clear();}}}}return list;}
}
- 通过解答
思想&#xff1a;先排序&#xff0c;然后外层循环 固定开始元素1 &#xff0c;设置 两个指针&#xff0c;一个指针start指向元素2&#xff08;元素2初始为元素1的下一个&#xff09;&#xff0c;一个指针end指向元素3&#xff08;元素3初始为最后一个&#xff09;
内层循环&#xff08;能找到3个元素条件start
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {public ArrayList<ArrayList<Integer>> threeSum(int[] num){ArrayList<ArrayList<Integer>> list &#61; new ArrayList<>();Arrays.sort(num);for(int i &#61; 0;i<num.length - 2;i&#43;&#43;){int start &#61; i &#43; 1;int end &#61; num.length - 1;while(start < end){int sum &#61; num[i] &#43; num[start] &#43; num[end];if(sum < 0){start&#43;&#43;;}else if(sum > 0){end--;}else{ArrayList<Integer> list_small &#61; new ArrayList<>();list_small.add(num[i]);list_small.add(num[start]);list_small.add(num[end]);if(!list.contains(list_small)){list.add(list_small);}start&#43;&#43;;end--;}}}return list;}
}