3 sum & 4 sum 4sum https://www.youtube.com/watch?v=TZLRWytk37Q https://www.youtube.com/watch?v=-AMHUdZc9ss 3 sum 这道题目的难点在于处理duplicate,给的数组可能会出现duplicate。 先sort下这个歌数组,时间复杂度为O(nlogn)。 把3sum的问题拆分为2sum问题, 可以遍历数组的时候,指针i指向的为target=nums[i], 那么剩下就是再找两个元素的和为-target的问题。 由于存在重复元素,用hashmap做起来很不方便,可以用两指针来从两端往中间找。 注意边界条件的判定跟duplicate。 时间复杂度为O(nlogn) + O(n^2) // 3sum hash map? Two Sum. Hash map & two pointers // hash map, return indices of the two numbers such that they add up to a specific target. class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i++){ if(map.containsKey(target - nums[i])){ result[0] = map.get(target - nums[i]); result[1] = i; }else{ map.put(nums[i], i); } } return result; } } // two pointers , can’t, because index changed after sorting 4sum 见 java solution // no map. NLOGN + N^3 class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> result = new ArrayList<>(); if(4 * nums[0] > target || 4 * nums[nums.length - 1] < target) return result; if(nums == null || nums.length < 4) return result; Arrays.sort(nums); for(int i = 0; i < nums.length - 3; i++){ if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target)break; //first candidate too large, search finished if(nums[i]+nums[nums.length-1]+nums[nums.length-2]+nums[nums.length-3]<target)continue; while( i > 0 && nums[i] == nums[i-1]) i++; for(int j = i+1; j < nums.length - 2; j++){ if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target)break; //second candidate too large if(nums[i]+nums[j]+nums[nums.length-1]+nums[nums.length-2]<target)continue; while( j>i+1 && nums[j] == nums[j-1]) j++; int n = j+1; int m = nums.length - 1; while( n < m){ int sum=nums[i]+nums[j]+nums[n]+nums[m]; if(target == sum){ result.add(Arrays.asList(nums[i], nums[j], nums[n], nums[m])); while(n < m && nums[n] == nums[n+1]) n++; while(n < m && nums[m] == nums[m-1]) m--; n++; m--; }else if( sum < target){ n++; }else{ m--; } } } } return result; } } // USE MAP
3 sum & 4 sum
猜你喜欢
转载自www.cnblogs.com/tobeabetterpig/p/9450366.html
今日推荐
周排行