当前位置: 首页 > news >正文

【剑斩OFFER】优雅的解法——三数之和

一、题目描述

二、算法原理

        ⏩️1.排序

        ⏩️2、固定一个数 i ,在该数的后面利用双指针来快速找到满足条件的两个数。

❌️提示:只要 i + left + right = 0,即满足条件,故 left + right = 4 即可。此时 left + right = 2 小于 4,所以 left++ ,继续找,如果 left + right > 4,则 right -- 。找到一种满足条件的两个数也不要停,遍历所有的结果。

       ⏩️ 3、去重

❌️注意:上面俩种情况都满足条件,我们只能取其中一个,所以 i 和 left 、right 在移动的过程中,下一个数和当前的数一样就跳过。left 和 right 在移动的过程中有可能会越界哦。还有一种情况:如果i >= 1,永远在后面找不到两俩个数加起来对于 - 1的,因为数组是有序的。

三、代码实现

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> v;sort(nums.begin(),nums.end());int n = nums.size();for(int i = 0; i < n;){if(nums[i] > 0){break;}int left = i + 1;int right = nums.size() - 1;int target = -nums[i];while(left < right){int sum = nums[left] + nums[right];if(sum > target){right--;}else if(sum < target){left++;}else{v.push_back({nums[i],nums[left],nums[right]});left++;right--;//去重while(left < right && nums[left] == nums[left -1]) left++;while(right > left && nums[right] == nums[right + 1]) right--;}}//去重i++;while(i < n && nums[i] == nums[i - 1]) i++;}return v;}};

完!!

http://www.dtcms.com/a/420317.html

相关文章:

  • C++之拷贝构造(浅拷贝与深拷贝)、this指针、内联函数
  • 销售网站开发步骤网站宝二级域名怎么设置
  • 上海浦东建筑建设网站手机端网站制作
  • 【高并发内存池——项目】page cache 回收内存
  • 深圳网站建设便宜信科网络企业网站建设有几种
  • 济南网站建设92jzh知名的设计公司网站
  • MySQL表的内外连接(重点)
  • 使用 SynMatrix 的同轴腔滤波器设计和优化
  • 图片文字制作深圳网站关键词优化公司
  • 小微企业建站天眼查官网查个人
  • Fixmap
  • YOLO通用无人机目标检测框架
  • 注册公司域名后如何做网站软件公司网站源码
  • 营销新人如何快速提升职场竞争力
  • 做网站后台用什么语言外贸网站建设加推广
  • 东莞网站设计哪家好长春网站制作wang
  • 如何将网站的关键词排名优化广州网站建设交易
  • 建设银行采购网站百度网盟推广 网站
  • 福州哪里会网站制作的centos 7 wordpress install
  • 【git】P2 git 安装与基础命令详解
  • 网站优化3个关键词和10个关键词的区别云服务器怎么样做网站
  • 网站开发 图片储存网页制作公司排名前十
  • 【DeepSeek-Math】使用单张2080Ti推理出现OOM错误的实验报告
  • 做捕鱼网站电话珠海网站设计多少钱
  • 3g微网站是什么怎么样创建一个网站
  • 单页网站开发费用wordpress改变域名
  • RGB三色呼吸灯 跑马
  • 流处理和批处理
  • 企业网站 合同网站服务器哪个好
  • 理论网站建设实施方案网站百度云