四数之和 - 力扣中等
admin
2024-03-16 01:07:53
0

题目链接

四数之和

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

0 <= a, b, c, d < n
a、b、cd 互不相同
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:
输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:
1<=nums.length<=200−109<=nums[i]<=109−109<=target<=1091 <= nums.length <= 200 \\ -10^9 <= nums[i] <= 10^9 \\ -10^9 <= target <= 10^9 \\ 1<=nums.length<=200−109<=nums[i]<=109−109<=target<=109

解题思路

思路一

双指针,时间复杂度为O(N3)O(N^3)O(N3)
排序
枚举前两个数字,剩下两个使用双指针lr枚举。

  • 如果nums[l] + nums[r] == target - nums[i] - nums[j],找到答案,更新lr
  • 如果nums[l] + nums[r] > target - nums[i] - nums[j],找到答案,r左移。
  • 如果nums[l] + nums[r] < target - nums[i] - nums[j],找到答案,l右移。

思路二

二分查找,时间复杂度为O(N3logN)O(N^3logN)O(N3logN)
排序
枚举前三个数字,查找第四个数target - nums[i] - nums[j] - nums[k]是否在数组里面。
很不幸,跑到最后一个测试用例超时。

注意溢出!

解题代码

思路一

#include
#include
#include
#include
using namespace std;class Solution {public:vector>ans;map>>vis;vector> fourSum(vector& nums, int target) {sort(nums.begin(),nums.end());for(int i=0;ifor(int j=i+1;jint l=j+1;int r=nums.size()-1;long long tmp_target = (long long)target-nums[i]-nums[j];while(lif(l==i||l==j){l++;continue;}if(r==i||r==j){r--;continue;}long long lr_sum = (long long)nums[l]+nums[r];if(lr_sum==tmp_target){if(vis[nums[i]][nums[j]][nums[l]]==0){vis[nums[i]][nums[j]][nums[l]]=1;vectorpath = {nums[i],nums[j],nums[l],nums[r]};ans.push_back(path);}l++;r--;continue;}if(lr_suml++;continue;}if(lr_sum>tmp_target){r--;continue;}}}}//        for(int i=0;i
//            vectorpath=ans[i];
//            for(int p=0;p
//                cout<//-2,-1,0,0,1,2vectornums = {0,0,0,0};int target = 1;Solution so = Solution();so.fourSum(nums,target);return 0;
}

思路二 (超时)

最后一个测试用例超时

#include
#include
#include
#include
using namespace std;class Solution {
public:vector>ans;map>>vis;int binary_search(vector&nums, int sidx, int target){int l=sidx;int r=nums.size()-1;while(lint m = (l+r)>>1;if(nums[m]==target)return m;if(nums[m]> fourSum(vector& nums, int target) {sort(nums.begin(),nums.end());for(int i=0;ifor(int j=i+1;jfor(int k=j+1;kif(vis[nums[i]][nums[j]][nums[k]])continue;long long d = (long long)target-nums[i]-nums[j]-nums[k];if(dnums[nums.size()-1])continue;int idx = binary_search(nums,k+1,d);if(idx!=-1){vis[nums[i]][nums[j]][nums[k]]=1;// vectorpath = {nums[i],nums[j],nums[k],nums[idx]};ans.push_back({nums[i],nums[j],nums[k],nums[idx]});
//                        for(int p=0;p
//                            cout<//-2,-1,0,0,1,2vectornums = {0,0,0,0};int target = 1;Solution so = Solution();so.fourSum(nums,target);return 0;
}

相关内容

热门资讯

华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...
安卓系统热点开启失败,排查与解... 最近是不是你也遇到了安卓系统热点开启失败的小麻烦?别急,让我来给你详细说说这个让人头疼的问题,说不定...
小米max2系统安卓,安卓系统... 你有没有听说过小米Max2这款手机?它那超大的屏幕,简直就像是个移动的电脑屏幕,看视频、玩游戏,那叫...
电池健康怎么保持安卓系统,优化... 手机可是我们生活中不可或缺的好伙伴,而电池健康度就是它的生命力。你有没有发现,随着使用时间的增长,你...
安卓手机怎么调系统颜色,安卓手... 你有没有发现,你的安卓手机屏幕颜色突然变得不那么顺眼了?是不是也想给它换换“脸色”,让它看起来更有个...
安卓系统清粉哪个好,哪款清粉工... 手机用久了,是不是觉得卡得要命?别急,今天就来聊聊安卓系统清理垃圾哪个软件好。市面上清理工具那么多,...
华为被限制用安卓系统,挑战安卓... 你知道吗?最近科技圈可是炸开了锅!华为,这个我们耳熟能详的名字,竟然因为一些“小插曲”被限制了使用安...
安卓系统是不是外国,源自外国的... 你有没有想过,我们每天离不开的安卓系统,它是不是外国货呢?这个问题听起来可能有点奇怪,但确实很多人都...
安卓系统缺少文件下载,全面解析... 你有没有发现,用安卓手机的时候,有时候下载个文件真是让人头疼呢?别急,今天就来聊聊这个让人烦恼的小问...
kktv系统刷安卓系统怎么样,... 你有没有听说最近KKTV系统刷安卓系统的事情?这可是个热门话题呢!咱们一起来聊聊,看看这个新玩意儿到...
安卓系统连接电脑蓝牙,操作指南... 你有没有遇到过这种情况:手机里堆满了各种好用的应用,可就是想找个方便快捷的方式,把手机里的音乐、照片...
安卓车机11.0系统包,智能驾... 你有没有发现,最近你的安卓车机系统好像悄悄升级了呢?没错,就是那个安卓车机11.0系统包!这可不是一...
安卓系统最高到多少,从初代到最... 你有没有想过,你的安卓手机系统升级到哪一步了呢?是不是好奇安卓系统最高能到多少呢?别急,今天就来带你...
手机系统安卓和ios系统下载地... 你有没有发现,现在手机的世界里,安卓和iOS两大系统就像是一对双胞胎,各有各的特色,让人爱不释手。今...
安卓系统最早开发公司,从安卓起... 你有没有想过,我们每天离不开的安卓系统,它究竟是由哪家公司最早开发的呢?没错,就是谷歌(Google...
安卓系统平板推荐学生用,学生适... 作为一名热爱学习的学生,你是不是也在寻找一款既实用又好用的平板电脑呢?平板电脑在学习和生活中可是个得...
安卓5.0系统多大容量,存储容... 你有没有想过,你的安卓手机里那个神秘的安卓5.0系统到底有多大容量呢?别急,今天就来给你揭秘这个谜团...
芒果嗨是安卓系统吗,揭秘这款热... 你有没有听说过“芒果嗨”这个名字?最近,这个名词在手机圈里可是火得一塌糊涂。不过,别急,今天咱们就来...
安卓系统锁屏如何破,破解攻略全... 你是不是也遇到了安卓手机锁屏的烦恼?每次解锁都要输入复杂的密码或者滑动图案,有时候真是急得团团转。别...
安卓系统app开机自启,深度解... 你有没有发现,每次手机开机,那些APP就像一群调皮的小精灵,迫不及待地跳出来和你打招呼?没错,说的就...