15. 三数之和
目录
题目链接
题目
解题思路
代码
题目链接
15. 三数之和 - 力扣(LeetCode)
题目
解题思路
先排序
单指针+双指针,优化就是初始三个是不是大于0,若大于0直接结束,末尾两个加当前的若<0直接跳出本次内层循环
细节:不能重复:外层循环指针记得和前一个比较去重,内层双指针也是记得去重
代码
class Solution { public List<List> threeSum(int[] nums) { int n=nums.length; List<List> st=new ArrayList(); if(n<3) return st; Arrays.sort(nums); for(int i=0;i0&&val==nums[i-1]) continue; if(val+nums[i+1]+nums[i+2]>0) break; if(val+nums[n-1]+nums[n-2]<0) continue; int j=i+1; int k=n-1; while(j0){ k--; }else if(s<0){ j++; }else{ st.add(List.of(val,nums[j],nums[k])); for(j++;j<k&&nums[j]==nums[j-1];j++); for(k--;j<k&&nums[k]==nums[k+1];k--); } } } return st; }}