15. 三数之和

public List<List> threeSum(int[] nums) {
if(nums == null || nums.length < 3){
return new ArrayList<>();
}

  • 数组排序
    Arrays.sort(nums);
    List<List> list = new ArrayList<>();
    for(int i=0;i<=nums.length-3;i++){
  • 对重复元素直接跳过
    if(i>0 &&nums[i]==nums[i-1]){
    continue;
    }
  • 当最小数大于零后便可直接退出
    if(nums[i]>0){
    break;
    }
  • 左右指针分别指向两个边界
    int l=i+1,r=nums.length-1;
    while (l<r){
    if(nums[i]+nums[l]+nums[r]==0){
    list.add(Arrays.asList(nums[i],nums[l],nums[r]));
    l++;
  • 跳过重复元素
    while(l<r && nums[l]==nums[l-1]){
    l++;
    }
    r--;
  • 跳过重复元素
    while(l<r && nums[r]==nums[r+1]){
    r--;
    }
    }else if(nums[i]+nums[l]+nums[r]>0) {
    r--;
    }else{
    l++;
    }
    }
    }
    return list;
    }
posted @ 2025-12-09 12:39  acccccccccc  阅读(0)  评论(0)    收藏  举报