2016建设银行辽宁招聘网站,vps网站目录显示灰色的,zhihe网站建设 淘宝,安阳县人口题目 题解一#xff1a;双指针法
图解参考链接#xff1a;画解算法#xff1a;15. 三数之和 详解参考代码随想录讲的非常好 梦破碎的地方#xff01;| LeetCode#xff1a;15.三数之和
代码#xff1a;
class Solution {public ListListInteger thre…题目 题解一双指针法
图解参考链接画解算法15. 三数之和 详解参考代码随想录讲的非常好 梦破碎的地方| LeetCode15.三数之和
代码
class Solution {public ListListInteger threeSum(int[] nums) {ListListInteger ans new ArrayList();//定义最后存放三元组的list集合if(nums.length3||nums null) return ans;//若数组元素个数小于3或为空直接返回空集合Arrays.sort(nums);//对数组进行排序//循环数组拿出每一个元素当做a abc 0for(int i0;inums.length;i){if(nums[i]0) break; // 因为是排序好的数组如果当前数字大于0则三数之和一定大于0所以结束循环 if(i0nums[i]nums[i-1]) continue; //给每个相同的nums元素去重不然会有重复的三元组的int left i1;//左指针 相当于bint right nums.length -1;//右指针 相当于cwhile(leftright){//为什么条件不是leftright 因为如果设置等于了//那么如果在相等的情况下构成了三元组其实right和left是同一个数肯定不行。int sum nums[i] nums[right] nums[left];//计算abc的值是否为0 if(sum0) right--; //如果sum大于0代表需要缩小sun的值那么只能通过把大值调小才能更加靠近0else if(sum0) left;//同理else if(sum 0){//满足条件ListInteger list Arrays.asList(nums[i],nums[left],nums[right]);//将满足条件的三个元素加入到list集合中ans.add(list);//把满足条件的三元组加入到最后的三元组大集合中//对right 和 left的去重 -1 -1 -1 0 1 2 2 三元组 -1 -1 2// nums left right// -1 -1 -1 0 1 2 2// nums left right 三元组 -1 -1 2while(left rightnums[left] nums[left 1]) left;while(left rightnums[right] nums[right - 1]) right--;left;right--;}}}return ans;}
}