leetcode18-4Sum

题目

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n

a、b、c 和 d 互不相同

nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0

输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

分析

这道题目很前面的三数之和的解法完全一样,四个数字我们就固定俩个数字,然后在剩下的数字里面寻找2个复合要求的数字,注意第一个for的剪枝

java 复制代码
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;

public class fourSum {
	public static void main(String[] args) {
		int[] arr = {1,0,-1,0,-2,2};
		List<List<Integer>> res = getFour(arr,0);
		for(List<Integer> lis : res) {
			for(Integer data : lis) {
				System.out.print(data + " ");
			}
			System.out.println();
		}
	}
	public static List<List<Integer>> getFour(int[] arr,int target) {
		int len = arr.length;
		Arrays.sort(arr);
		Set<List<Integer>> set = new HashSet();
		for(int i = 0;i<len-3;i++) {
			if(i > 0 && arr[i] == arr[i-1]) {
				continue;
			}
			for(int j = i+1;j<len-2;j++) {
				int m = j+1;
				int n = len - 1;
				while(m<n) {
					int data = arr[i]+arr[j]+arr[m]+arr[n];
					if(data == target) {
						List<Integer> lis = new ArrayList();
						lis.add(arr[i]);
						lis.add(arr[j]);
						lis.add(arr[m]);
						lis.add(arr[n]);
						set.add(lis);
						m++;
						n--;
					} else if(data < target) {
						m++;
					} else {
						n--;
					}
				}
			}
		}
		List<List<Integer>> res = new ArrayList();
		res.addAll(set);
		return res;
	}
}
相关推荐
大菠萝学姐8 分钟前
基于Spring Boot和Vue的高校图书馆座位预约系统的设计与实现
java·vue.js·spring boot·后端·python·mysql·vue
IT猿手18 分钟前
2025最新智能优化算法:沙狐优化(Rüppell‘s Fox Optimizer,RFO)算法求解23个经典函数测试集,完整MATLAB代码
android·算法·matlab·迁移学习·优化算法·动态多目标优化·动态多目标进化算法
信码由缰35 分钟前
Spring框架中的Component与Bean注解
java·spring
国家不保护废物38 分钟前
多模态模型数据传输的秘密武器:html5对象Blob深度解析
前端·面试·html
南方kenny38 分钟前
前端小知识:搞懂 BFC块级格式化上下文,告别面试“拦路虎”!
前端·css·面试
mrsk43 分钟前
JavaScript之变量的解构赋值全面解析(●'◡'●)
前端·javascript·面试
手可摘开开鱼1 小时前
BN LN
面试
嗜好ya1 小时前
LeetCode 560: 和为K的子数组
数据结构·算法·leetcode
程序员秘密基地1 小时前
基于html,css,vue,vscode,java,springboot,mysql数据库,在线考勤,管理系统
java·vue.js·spring·html·web app
络71 小时前
HashMap的put、get方法详解(附源码)
算法·哈希算法·hashmap