LeetCode 4Sum
来源:互联网 发布:网络存储器怎么用 编辑:程序博客网 时间:2024/05/18 15:04
原题链接在这里: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.
AC Java:
public class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if(nums == null || nums.length < 4) return res; Arrays.sort(nums); for(int i = 0 ;i<nums.length-3 ;i++){ if(i>0&&nums[i] == nums[i-1]){ continue; } for(int j = i+1;j<nums.length-2;j++){ if(j>i+1&&nums[j] == nums[j-1]){ //error 0,0,0,0 continue; } int l = j+1; int r = nums.length-1 ; while(l<r){ int sumFour = nums[i] + nums[j] + nums[l] + nums[r]; if(sumFour<target){ l++; }else if(sumFour>target){ r--; }else{ List<Integer> subList = new ArrayList<Integer>(); subList.add(nums[i]); subList.add(nums[j]); subList.add(nums[l]); subList.add(nums[r]); res.add(subList); l++; r--; while(l<r&&nums[l] == nums[l-1]){ l++; } while(l<r&&nums[r] == nums[r+1]){ r--; } } } } } return res; }}
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- LeetCode: 4 Sum
- LeetCode: 4Sum
- LeetCode 4Sum
- Leetcode: 4SUM
- 【leetcode】 4 sum
- LeetCode 4Sum
- leetcode 44: 4Sum
- [Leetcode] 4 Sum [Unsolved]
- 【leetcode】4Sum
- LeetCode 3Sum
- LeetCode 题解(148): Number of Digit One
- PMC 荣膺ChannelPro读者选择最佳存储控制器金奖
- 硬盘构造及其工作原理
- MySQL开发规范之我见
- LeetCode 4Sum
- android Toast文字加大
- spring 与 struct2整合
- spring整合hibernate
- LeetCode 题解(149): Search a 2D Matrix II
- Android Api Demos登顶之路(十九)Rotation Animation
- DT大数据梦工厂 温故而知新 之21讲
- window.onload from before
- Linux 修改 IP , DNS, NETMASK, GETEWAY