博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头做leetcode之leetcode 15 三数之和
阅读量:2436 次
发布时间:2019-05-10

本文共 1045 字,大约阅读时间需要 3 分钟。

15.三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

  1. 用排序和双指针的方法完成。
  • 先将数组由小到大排序(用sort函数即可)
  • 从头到尾遍历数组,将遍历到的元素设为ass,这样这个问题就变成了在之后的元素中找到两个相加等于0-ass的元素。
  • 将左指针置于遍历到的元素之后一个,右指针位于数组末尾。三数之和大于0即右指针移动,小于0即左指针移动。相等则存入数组。
  • 注意:要避免重复的情况。在遍历过程中相等的数只遍历一次。找到目标的三个数存入数组时也要对左右指针做相同操作
class Solution {
public: vector
> threeSum(vector
& nums) {
vector
> res; if(nums.size() < 3) return res; sort(nums.begin(),nums.end()); for(int i=0;i
=1 && nums[i]==nums[i-1]) continue; int ass=nums[i]; if(ass > 0) break; int left=i+1; int right=nums.size()-1; while(left < right){ if(ass + nums[left] + nums[right] < 0) left++; else if(ass + nums[left] + nums[right] > 0) right--; else{ res.push_back({ ass,nums[left],nums[right]}); left++; right--; while(left < right && nums[left]==nums[left-1]) left++; while(left < right && nums[right]==nums[right+1]) right--; } } } return res; }};

通过时间:

在这里插入图片描述

转载地址:http://hnemb.baihongyu.com/

你可能感兴趣的文章
Symbian命名规则(翻译)(转)
查看>>
windows server 2003的设置使用(转)
查看>>
优化Win2000的NTFS系统(转)
查看>>
IE漏洞可使黑客轻易获取私人信息(转)
查看>>
脱机备份与恢复实战(转)
查看>>
WLINUX下的DNS服务器设置(转)
查看>>
游戏引擎剖析(二)(转)
查看>>
sms发mms C语言源码(转)
查看>>
窝CDMA网络中移动IP接入Internet(转)
查看>>
实现MMS增值业务的关键技术(转)
查看>>
Vista被破解 一个小程序可成功激活(转)
查看>>
SEO作弊常见方法和形式(转)
查看>>
蓝芽技术的原理和应用(2)(转)
查看>>
解决接通电源后自动开机问题(转)
查看>>
实例编程:用VC写个文件捆绑工具(转)
查看>>
教你如何用手工迅速剿灭QQ广告弹出木马(转)
查看>>
Windows系统维护完全图形化攻略(转)
查看>>
WAP2.0移动互联(转)
查看>>
WAP手机防毒攻略(转)
查看>>
如何建立C++ BuilderX 1.5 Mobile Edition开发环境(转)
查看>>