Leetcode: 3Sum

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
    For example, given array S = {-1 0 1 2 -1 -4},

    A solution set is:
    (-1, 0, 1)
    (-1, -1, 2)

Best 做法:不用Extra Space, Time Complexity still O(N^2)

Good syntax:

List<List<Integer>> res = new LinkedList<>();

res.add(Arrays.asList(num[i], num[lo], num[hi]));

 // creating Arrays of String type

 String a[] = new String[] { "A", "B", "C", "D" };
            
 // getting the list view of Array

 List<String> list = Arrays.asList(a);
 
 1 class Solution {
 2     public List<List<Integer>> threeSum(int[] nums) {
 3         List<List<Integer>> res = new ArrayList<> ();
 4         if (nums == null || nums.length < 3) return res;
 5         Arrays.sort(nums);
 6         
 7         int p = nums.length - 1;
 8         while (p >= 2) {
 9             if (p < nums.length - 1 && nums[p] == nums[p + 1]) {
10                 p--;
11                 continue;
12             }
13             int target = -nums[p];
14             int l = 0, r = p - 1;
15             while (l < r) {
16                 if (nums[l] + nums[r] == target) {
17                     res.add(Arrays.asList(nums[l], nums[r], nums[p]));
18                     while (l < r && nums[l] == nums[l + 1]) {
19                         l++;
20                     }
21                     while (l < r && nums[r] == nums[r - 1]) {
22                         r--;
23                     }
24                     l++;
25                     r--;
26                 }
27                 else if (nums[l] + nums[r] < target) {
28                     l++;
29                 }
30                 else r--;
31             }
32             p--;
33         }
34         return res;
35     }
36 }