15 三数之和

双指针,从左边向右边“滑”,用 Set 去重

import java.util.*;
class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        if(nums.length < 3){
            return new ArrayList<>();
        }
        Set<List<Integer>> set = new HashSet<>();
        Arrays.sort(nums);
        for(int i = 0; i < nums.length - 2; i++){
            int l = i + 1;
            int r = nums.length - 1;
            while(l < r){
                if(nums[i] + nums[l] + nums[r] == 0){
                    List<Integer> temp = new ArrayList<>();
                    temp.add(nums[i]);temp.add(nums[l]);temp.add(nums[r]);
                    set.add(temp);
                    l ++; r --;
                }
                else if(nums[i] + nums[l] + nums[r] < 0){
                    l ++;
                }
                else{
                    r --;
                }
            }
        }
        return new ArrayList<>(set);
    }
}
原文地址:https://www.cnblogs.com/realzhaijiayu/p/13536179.html