Leetcode 3Sum

 1 class Solution {
 2     public List<List<Integer>> threeSum(int[] nums) {
 3         if (nums == null || nums.length <= 2) return new ArrayList();
 4         
 5         Arrays.sort(nums);
 6         
 7         List<List<Integer>> res = new ArrayList<>();
 8         
 9         for (int i = 0; i < nums.length; i++) {
10             if (i > 0 && nums[i] == nums[i - 1]) continue;
11             int numsI = nums[i];
12             
13             int j = i + 1, k = nums.length - 1;
14             while (j < k) {
15                 if (numsI + nums[j] + nums[k] < 0) {
16                     j++;
17                 } else if (numsI + nums[j] + nums[k] > 0) {
18                     k--;
19                 } else {
20                     res.add(Arrays.asList(numsI, nums[j++], nums[k--]));
21                     while (j < k && nums[j] == nums[j - 1]) j++;
22                     while (j < k && nums[k] == nums[k + 1]) k--;
23                 }
24             }
25         }
26         
27         return res;
28     }
29 }

有个要注意的点,一开始为了代码看上去统一,没留意写加上局部变量:

int numsI = nums[i];

然后速度才40%多。加上之后变成了90%多。一开始还想着jvm会不会帮忙把这个临时变量赋值给优化一下,看来是想多了

上一篇:[LeetCode] 15. 3Sum(三数之和)


下一篇:3Sum