LeetCode 4Sum

原题链接在这里:https://leetcode.com/problems/4sum/

这道题其实是3Sum的扩展,使用的方法基本相同,只是多加了一层loop.

但要注意一点:For inner j loop, if statement, 判断overflow 时要写成 j>i+1, 而不是j>0, 与 j 的 初始条件有关。若是写成j>0的话,含有四个相同数的输入就会被跳过。e.g. 0,0,0,0 target = 0.

Time Complexity: O(n^3), 两层for, 每一层用时n, 内层for里面的while 用了O(n) time, 一共用了O(n^3).

Space: O(3 * res.size()).

AC Java:

 1 public class Solution {
 2     public List<List<Integer>> fourSum(int[] nums, int target) {
 3         List<List<Integer>> res = new ArrayList<List<Integer>>();
 4         if(nums == null || nums.length < 4){
 5             return res;
 6         }
 7         
 8         Arrays.sort(nums);
 9         for(int i = 0; i<nums.length-3; i++){
10             if(i>0 && nums[i] == nums[i-1]){
11                 continue;
12             }
13             
14             for(int j = i+1; j<nums.length-2; j++){
15                 if(j>i+1 && nums[j] == nums[j-1]){
16                     continue;
17                 }
18                 
19                 int l = j+1;
20                 int r = nums.length-1;
21                 while(l<r){
22                     int sumFour = nums[i] + nums[j] + nums[l] + nums[r];
23                     if(sumFour < target){
24                         l++;
25                     }else if(sumFour > target){
26                         r--;
27                     }else{
28                         List<Integer> item = new ArrayList<Integer>();
29                         item.add(nums[i]);
30                         item.add(nums[j]);
31                         item.add(nums[l]);
32                         item.add(nums[r]);
33                         res.add(item);
34                         l++;
35                         r--;
36                         while(l<r && nums[l] == nums[l-1]){
37                             l++;
38                         }
39                         while(l<r && nums[r] == nums[r+1]){
40                             r--;
41                         }
42                     }
43                 }
44             }
45         }
46         return res;
47     }
48 }

 

你可能感兴趣的:(LeetCode 4Sum)