当前位置:网站首页>力扣18-四数之和——双指针法
力扣18-四数之和——双指针法
2022-08-10 19:01:00 【张怼怼√】
题目描述
给你一个由 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
你可以按 任意顺序 返回答案 。
求解思路
- 这道题目和三数之和就是一样的做法,就是在原来的基础上增加一层循环。
力扣15-三数之和——HashSet&双指针法力扣15-三数之和——HashSet
https://blog.csdn.net/weixin_44564247/article/details/126250012
只是在官方的测试用例中有一个超出边界的示例,所以需要将int类型转为long。
输入输出示例
代码
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
Set<List<Integer>> set = new HashSet<>();
for(int i = 0; i < nums.length; i++){
for(int j = i + 1; j < nums.length; j++){
int left = j + 1;
int right = nums.length - 1;
while(left < right){
if((long)nums[i] + nums[j] + nums[left] + nums[right] == target){
set.add(new ArrayList<>(Arrays.asList(nums[i] , nums[j] , nums[left] , nums[right])));
left++;
right--;
}else if((long)nums[i] + nums[j] + nums[left] + nums[right] <target){
left++;
}else right--;
}
}
}
List<List<Integer>> res = new ArrayList<>(set);
return res;
}
}
边栏推荐
猜你喜欢
随机推荐
openssl查看证书信息
Redis command---key chapter (super complete)
RS-485多主机通信的组网方式评估
【初学必备】3d游戏建模入门基础知识
杭电多校七 1003-Counting Stickmen(组合数学)
PG中的Index-Only Scans解密
QoS Quality of Service Eight Congestion Avoidance
C#/VB.NET 将PDF转为PDF/X-1a:2001
Win11如何清除最近打开过的文件记录?
MySQL 查询出重复出现两次以上的数据 - having
QoS服务质量七交换机拥塞管理
类型和id对应的两个数组
FPGA工程师面试试题集锦61~70
第四届“传智杯”全国大学生IT技能大赛(初赛A组) 补题
[TAPL] 概念笔记
MSE 治理中心重磅升级-流量治理、数据库治理、同 AZ 优先
2022杭电多校七 Black Magic (签到)
多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU)
Unity_Stack<T>()的应用(多个次级界面后的返回逻辑)
QoS Quality of Service Six Router Congestion Management