> 技术文档 > 15. 三数之和

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; }}