首页 > 其他分享 >四数之和

四数之和

时间:2023-05-03 12:45:19浏览次数:34  
标签:四数 target nums int right && left

题目:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,

使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

 

class Solution {
public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; sort(nums.begin(),nums.end()); for(int k=0;k<nums.size();k++) { if(nums[k]>target && nums[k]>=0)//第一次剪枝 { break; } if(k>0 && nums[k]==nums[k-1])//去重,位置不能颠倒 { continue; } for(int i=k+1;i<nums.size();i++) { if(nums[k]+nums[i]>target && nums[k]+nums[i]>=0)//第二次剪枝 { break; } if(nums[i]==nums[i-1]&&i>k+1)//去重 { continue; } int left=i+1; int right=nums.size()-1; while(right>left){ int sum=nums[k]+nums[i]+nums[left]+nums[right]; if(sum>target){ right--; } else if(sum<target) { left++; } else{ result.push_back(vector<int>{nums[k],nums[i],nums[left],nums[right]}); while(right>left&&nums[left]==nums[left+1])left++;//去重 while(right>left&&nums[right]==nums[right-1])right--; left++; right--; } } } } return result; } };

 

标签:四数,target,nums,int,right,&&,left
From: https://www.cnblogs.com/gaishuobulao/p/17368923.html

相关文章

  • 四数相加
    题目:给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l) ,使得 A[i]+B[j]+C[k]+D[l]=0。 classSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums......
  • 18.四数之和——学习笔记
    题目:给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d<na、b、c和d互不相同nums[a]+nums[b]+nums[c......
  • #yyds干货盘点# LeetCode程序员面试金典:四数之和
    题目:给你一个由n个整数组成的数组 nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d <na、b、c和d互不相同nums[a]+nums[b]+nums[c]......
  • 四数相加|哈希表
    四数相加给定四个数组,如果四个数相加,如果和为0那么计数加一,最后输出一共有几个组合使得和为0。这题应用哈希表解决对应题目454.四数相加II哈希表使用哈希表,保存前两个数组对应的组合之和。value为两数相之和,如果有相同那么value加一。之和再遍历剩下两个数组之和的组合,再......
  • 代码随想录Day7-Leetcode454. 四数相加 II,383. 赎金信 ,15. 三数之和 ,18. 四数之和
    454.四数相加II这个第一时间没想出来怎么做的;后面看了题解才发现可以两两分组;绝了/***@param{number[]}nums1*@param{number[]}nums2*@param{number[......
  • LeetCode454. 四数相加 II
    题目描述:给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i,j,k,l) 能满足:0<=i,j,k,l<nnums1[i]+nums2[j]......
  • LeetCode 18. 四数之和
    classSolution{public:vector<vector<int>>fourSum(vector<int>&nums,inttarget){vector<vector<int>>ans;longlongtmp=target;......
  • 代码随想录训练营day10|第18题. 四数之和、344.反转字符串、541. 反转字符串II、哈希
    第18题.四数之和题目链接:第18题.四数之和题目描述:给定一个包含n个整数的数组nums和一个目标值target,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d......
  • 代码随想录训练营day9|第454题.四数相加II,383. 赎金信,第15题. 三数之和,
    第454题.四数相加II题目链接:第454题.四数相加II题目描述:给定四个包含整数的数组列表A,B,C,D,计算有多少个元组(i,j,k,l),使得A[i]+B[j]+C[k]+D[l]=......
  • 代码随想录训练营day8|第202题. 快乐数、两数之和、第454题.四数相加II
    202.快乐数题目链接:202.快乐数题目描述:编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然......