美文网首页
三数之和

三数之和

作者: 赵老拖 | 来源:发表于2022-02-20 20:44 被阅读0次

    描述

    给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。

    数据范围:0≤n≤10000≤n≤1000,数组中各个元素值满足 ∣val∣≤100∣val∣≤100

    空间复杂度:O(n2)O(n2),时间复杂度 O(n2)O(n2)

    注意:

    三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)

    解集中不能包含重复的三元组。

    例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, -10, 20),(-10, 0, 10)

    
    import java.util.*;
    
    public class Solution {
    
        public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
    
          ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
         if(num == null){
    
                return ans;
    
            }
    
            int len = num.length;
    
            if(len<3){
    
                return ans;
    
            }
    
            Arrays.sort(num);
    
          //第一轮遍历,找到第一个值位置
    
            for(int i = 0;i<len;i++){
    
                if(num[i]>0){
    
                    return ans;
    
                }
    
               //如果值跟之前一样,结果是一样,去重使用
    
                if(i>0 && num[i] == num[i-1]){
    
                    continue;
    
                }
    
                int cur = num[I];
    
              //第二轮遍历
    
                int left = i+1;
    
                int right = len-1;
    
                while(left<right){
    
                    if(cur + num[left]+num[right] == 0){
    
                      ArrayList<Integer> list = new ArrayList<>();
    
                      list.add(cur);
    
                      list.add(num[left]);
    
                      list.add(num[right]);
    
                      ans.add(list);
    
                      while(left<right && num[left] == num[left+1]){
    
                          left++;
    
                      }
    
                      while(left<right && num[right] == num[right-1]){
    
                          right--;
    
                      }
    
                      left++;
    
                      right--;
    
                    }else if(cur + num[left]+num[right] < 0){
    
                        left++;
    
                    }else{
    
                        right--;
    
                    }
    
                }
    
            }
    
            return ans;
    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:三数之和

          本文链接:https://www.haomeiwen.com/subject/rwbvlrtx.html