题目地址

https://leetcode-cn.com/problems/4sum/

思路

四数之和,和三数之和是一个思路,都是使用双指针法,但是有一些细节需要注意,例如: 不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值

C++代码

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++) {// 这中剪枝是错误的,这道题目target 是任意值 // if (nums[k] > target) {//     return result;// }// 去重if (k > 0 && nums[k] == nums[k - 1]) {continue;}for (int i = k + 1; i < nums.size(); i++) {// 正确去重方法if (i > k + 1 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.size() - 1;while (right > left) {if (nums[k] + nums[i] + nums[left] + nums[right] > target) {right--;} else if (nums[k] + nums[i] + nums[left] + nums[right] < target) {left++;} else {result.push_back(vector<int>{nums[k], nums[i], nums[left], nums[right]});// 去重逻辑应该放在找到一个四元组之后while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;// 找到答案时,双指针同时收缩right--;left++;}}}}return result;}};

更多精彩文章持续更新,可以微信搜索「 代码随想录」第一时间阅读,关注后有大量的学习资料和简历模板可以免费领取,本文 GitHub:https://github.com/youngyangyang04/leetcode-master 已经收录,欢迎star,fork,共同学习,一起进步。

「leetcode」C++题解:四数之和 / 4Sum 三数之和的延伸,建议使用双指针法相关推荐

  1. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  2. 算法笔记-两数之和、三数之和、四数之和(LeetCode)

    两数之和 1.两数之和 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  3. 两数之和、三数之和、四数之和、K数之和

    两数之和.三数之和.四数之和和K数之和是最近听室友提起的几道有意思的基础题,可以说是把双指针运用的淋漓尽致.(K数之和其实是一个动态规划的题,此处因为满足*数之和的的结构,放在一起对比提一下). 1. ...

  4. 消除左递归c++代码_「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解...

    链接 https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/ 思路 本题和113.路径总和II是类似的思路,做完这道题,可以顺便把113. ...

  5. leetcode两数之和,三数之和,四数之和问题

    1. 两数之和 遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回.若列表中的与元素有重复也可这样处理,因为 ...

  6. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  7. leetcode 16. 3Sum Closest | 16. 最接近的三数之和(双指针)

    题目 https://leetcode.com/problems/3sum-closest/ 题解 方法1:固定 L,双指针找 M.R 时间复杂度 O(n^2),推荐此方法. 证明不会有元素遗漏,详见 ...

  8. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

    数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...

  9. ❤️导图整理数组5: 四数之和 相比 三数之和 的大量优化, 力扣18详细注解❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  10. 数组计算两数之和,三数之和,四数之和

    这种计算几个数据之和的题目, 一般分为 在同一个数组中计算几个数之和等于某一个值. 还有一种是给几个数组,每个数组中取一个数据,让你算几个数之和等于某一个值. 一般情况下,第二中的难度会更大,因为去重 ...

最新文章

  1. Linux Shell 脚本限制ssh最大用户登录数
  2. document.all使用
  3. js 显示当前时间(年月日时分秒)——getYear()与getFullYear()
  4. P、NP、NPC(NP完全问题)、NP-hard问题概述
  5. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
  6. html中使浮动的字为行排列,CSS布局:float浮动
  7. 95-40-038-java.util.concurrent-ConcurrentLinkedQueue
  8. C++命名空间的玩法
  9. python pip更改源
  10. 在生产中使用Istio,我们学到了什么?
  11. SQL float 保留两位小数
  12. c++ 写并查集算法模板
  13. 学好英语,才能当个好程序员,英语基础语法总结
  14. 视频问答社区VYou宣布关闭,问答社交模式会走向哪?
  15. 研发和测试在多国陆续展开 全球央行数字货币研发驶入快车道
  16. Eclipse如何安装lombok插件
  17. 企业人事管理系统V0.2.0
  18. String类常用方法思维导图总结
  19. 在Arcgis地图上绘制Echarts热力图(Heatmap)
  20. 2006素材网站大全

热门文章

  1. ANDROID L——Material Design详解(UI控件)
  2. minSdkVersion、maxSdkVersion、targetSdkVersion、target释义
  3. com线程模型实验之三
  4. 网络编程之计算机网络的发展及基础网络概念
  5. review一下上一年的积累
  6. [Noip2007]Core树网的核
  7. MonkeyRunner_API
  8. hdu和poj的基础dp30道
  9. MongoDB-Getting Started with the C# Driver
  10. scanf 与getchar区别