leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
来源:互联网 发布:奥尼尔生涯数据 编辑:程序博客网 时间:2024/06/14 07:26
package leetcode.T018_4Sum;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;/** * @Title: Solution.java * @Package leetcode.T018_4Sum * @Description: TODO * @author zhouzhixiang * @date 2017-6-8 下午1:19:08 * @version V1.0 */public class Solution {/** * <pre> * 原题 * 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) * * 题目大意 * 给定一个整数数组,找出a + b + c + d = target的唯一解。 * * 解题思路 * 先确定a和d的两个数,对于a和d两个数,不能同时重复使用。然后再确定b和c,同样这两个数也不能 * 同时重复使用。找出所有满足条件的解,同时可以保证解不重复。 * </pre> * * @param num * @param target * @return */public static void main(String[] args) {int[] arr = { 1, 0, -1, 0, -2, 2 };int target = 0;new Solution().fourSum(arr, target);//new Solution().find4Sum(arr, target);}/** * @Title: find4Sum * @Description: zhouzhixiang-First:简便 * @param @param arr * @param @param target * @param @return * @return String * @throws */public String find4Sum(int[] arr, int target) {// 四元素之和int sum = 0;if (arr.length < 4 || arr == null) {return null;}Arrays.sort(arr);// 输出结果String result = "";for (int a = 0; a < arr.length - 3; a++) {for (int b = a + 1; b < arr.length - 2; b++) {for (int c = b + 1; c < arr.length - 1; c++) {for (int d = c + 1; d < arr.length; d++) {sum = arr[a] + arr[b] + arr[c] + arr[d];if (sum == target && arr[a] <= arr[b]&& arr[b] <= arr[c] && arr[c] < arr[d]) {result += "( " + arr[a] + ", " + arr[b] + ", "+ arr[c] + " , " + arr[d] + " ),";}}}}}result = result.substring(0, result.length() - 1);System.out.println(result);return result;}/*** @Title: fourSum * @Description: 参考:比较简便* @param @param arr* @param @param target* @param @return * @return List<List<Integer>> * @throws */public List<List<Integer>> fourSum(int[] arr, int target) {List<List<Integer>> result = new LinkedList<>();if (arr == null || arr.length < 4) {return result;}Arrays.sort(arr);// 第一个数for (int i = 0; i < arr.length-3; i++) {// 第一个数使用不重复if (i > 0 && arr[i] == arr[i - 1]) {continue;}// 第四个数for (int j = arr.length-1; j>i+2; j--) {// 第四个数使用不重复if(j<arr.length-1 && arr[j]==arr[j+1]){continue;}// 第二个数肯能的起始位置int start = i+1;// 第三个可能的数的结束位置int end = j-1;int n = target - arr[i] - arr[j];while(start<end){if(arr[start] + arr[end]==n){List<Integer> four = new ArrayList<>(4);four.add(arr[i]);four.add(arr[start]);four.add(arr[end]);four.add(arr[j]);result.add(four);do {start++;} while (start<end && arr[start]==arr[start-1]); // 第二个数保证不重复do {} while (start<end && arr[end]==arr[end+1]); // 第三个数保证不重复}else if(arr[start] + arr[end]>n){ do {end--;} while (start<end && arr[end]==arr[end+1]); }else{do {start++;} while (start<end && arr[start]==arr[start-1]);}}}} System.out.println(result);return result;}}
阅读全文
0 0
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 给定一个n个整数的数组S,是否存在S中的4个数,使得a + b + c + d = target。 在数组中找出所有唯一的四元组,给出目标的总和。
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- 给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
- 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 对于给定的整数集合S,求出最大的d,使得a+b+c=d。
- 找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}。
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- JAVA简单二维码实现
- 在 Ubuntu 上使用 Nginx 部署 Flask 应用 【已翻译100%】
- 控制页面不能回退
- 面向对象设计原则之五--迪米特法则
- EL表达式中,写三目运算符
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- Fiddler抓包使用教程-过滤
- sed: 1: “…”: invalid command code on Mac OS
- Xpath 模糊搜索
- 微信小程序 css控制文本行防止溢出
- Java泛型
- 基于flask的超分辨率展示
- BZOJ1907: 树的路径覆盖
- 调节系统音量VC++ (win10/win7)