leetcode-15 三數之和

題目分析

  • 該題目利用雙指針加排序
  • 該題目的難點在於去除重複
    那麼如何去除重複呢?
  • 除去重複的第一個元素i
  • 對於每一個i,除去重複的l和r

Java代碼

public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++){
            if(nums[i]>0){
                return res;
            }
            int l = i+1;
            int r = nums.length-1;
            // 去除重複的i
            if(i>0 && nums[i]==nums[i-1]){
                continue;
            }
            while(l<r){
                if(nums[i] + nums[l] + nums[r] == 0){
                    List<Integer> list = new ArrayList<>();
                    list.add(nums[i]);
                    list.add(nums[l]);
                    list.add(nums[r]);
                    res.add(new ArrayList<>(list));
                    // 去除重複的l和r
                    while(l<r && nums[l]==nums[l+1]){
                        l++;
                    }
                    while(l<r && nums[r]==nums[r-1]){
                        r--;
                    }
                    // 調整l和r,遍歷所有i產生的三元組
                    l++;
                    r--;
                }else if(nums[i] + nums[l] + nums[r] < 0){
                    l++;
                }else{
                    r--;
                }
            }
        }
        return res;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章