概述
解题思路
从头到尾-2遍历数组,每次从中取出一个数num[i],然后定义i+1,num.length-1两个指针,
当left<right时:循环
如果num[i]+num[left]+num[right]==0,则加入list中
如果小于0,则L++
如果大于0 ,则R--
直到结束
参考代码
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
//1.首先对数组进行排序
//2.重头开始取出元素,然后定义两个指针
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
if(num==null||num.length<3){
return new ArrayList<>();
}
Arrays.sort(num);
for(int i=0;i<num.length-2;i++){
int left=i+1;
int right=num.length-1;
//如果num[i]>0,则不可能存在三个数之和等于0
if(num[i]>0){//因为已经排好序了,有一个正数说明以后都是正数
break;
}
if(i>0 && num[i]==num[i-1]){
continue;
}
while(left<right){
int sum=num[left]+num[right]+num[i];
if(sum==0){
ArrayList<Integer> list=new ArrayList<>();
list.add(num[i]);
list.add(num[left]);
list.add(num[right]);
res.add(list);
while(left<right && num[left]==num[left+1]){
left++;
}
while(left<right && num[right]==num[right-1]){
right--;
}
left++;
right--;
}
else if(sum>0){
right--;
}
else if(sum<0){
left++;
}
}
}
return res;
}
}
最后
以上就是拉长纸飞机为你收集整理的数组中的3个数之和为0的全部内容,希望文章能够帮你解决数组中的3个数之和为0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复