leetCode 18.4Sum (4数字和) 解题思路和方法
来源:互联网 发布:csp软件能力认证 编辑:程序博客网 时间:2024/05/16 19:21
4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0.
A solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0.
A solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
思路:此题与3Sum是相关的题,此题转换成b+c+d = target - a =k的3Sum。
具体方法和思路见如下代码:
public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> list = new ArrayList<List<Integer>>(); int len = nums.length; if(len <= 3)//长度不足,直接返回 return list; Arrays.sort(nums);//排序 //开始循环 for(int i = 0; i < len - 2; i++){ //如果target> 0 且nums[i]>target,则剩余数组相加不可能=target if((target > 0 && nums[i] > target) || (target < 0 && nums[len-1] < target)) break; if(i > 0 && nums[i] == nums[i-1])//消除重复 continue; //由a+b+c+d = t 转换成b + c + d = t - a int a = target - nums[i]; for(int j = i + 1; j < len - 1;j++){ if((a > 0 && nums[j] > a) || (a < 0 && nums[len-1] < a))//如果nums[j]>a,则剩余数组相加不可能=a break; if(j > i+1 && nums[j] == nums[j-1]) continue; int m = j+1; int n = len - 1; while(m < n){ int k = nums[j] + nums[m] + nums[n]; if(k == a){ List<Integer> al = new ArrayList<Integer>(); al.add(nums[i]); al.add(nums[j]); al.add(nums[m]); al.add(nums[n]); list.add(al); m++; n--; while(m < n && nums[m] == nums[m-1]) m++; while(m < n && nums[n] == nums[n+1]) n--; } else{//分情况改变位置标记 if(k < a) m++; else n--; } } } } return list; }
0 0
- leetCode 18.4Sum (4数字和) 解题思路和方法
- leetCode 1. Two Sum 解题思路和方法
- leetCode 39.Combination Sum(组合总和) 解题思路和方法
- leetCode 9.Palindrome Number (回文数字) 解题思路和方法
- leetCode 112.Path Sum (路径和) 解题思路和方法
- leetcode 113. Path Sum II (路径和) 解题思路和方法
- leetCode 15. 3Sum (3数之和) 解题思路和方法
- leetCode 16.3Sum Closest (离给定值最近的三数之和) 解题思路和方法
- leetCode 40.Combination Sum II(组合总和II) 解题思路和方法
- leetCode 64.Minimum Path Sum (最短路) 解题思路和方法
- leetcode解题之 18. 4Sum Java版(结果是目标值的四个数字和)
- leetCode 22.Generate Parentheses (生成括号) 解题思路和方法
- leetCode 27.Remove Element (删除元素) 解题思路和方法
- leetCode 44.Wildcard Matching (通配符匹配) 解题思路和方法
- leetCode 46.Permutations(排列组合) 解题思路和方法
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
- leetCode 48.Rotate Image (旋转图像) 解题思路和方法
- leetCode 49.Anagrams (回文构词法) 解题思路和方法
- 在一台用户PC主机上,子网掩码、默认网关的作用是什么?
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- eclipse反编译插件----网上资料的坑爹系列
- git 初级基础
- HTTP 超文本传输协议
- leetCode 18.4Sum (4数字和) 解题思路和方法
- Myeclipse-查找类文件(Open Type)
- 倘若音乐(Android)
- sass基础
- nginx lua调用redis和mongo
- Leetcode 2 Add Two Numbers Java
- Android 开源项目android-open-project工具库解析之(二) 高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器,安全,插件化,文件
- 安装mac 10.7过程
- Dialog和Popupwindow