leetcode 3Sum C++

  荒废好久没更新了,时间过得很快,转眼就2017年了,经历了苦闷的科研阶段,发了论文顺利毕业;也经过三地辗转奔波来去的找工作,最终还是犹犹豫豫选择了自己知道以后可能会后悔的,果然就后悔了。所以还是应该选择自己喜欢的,当然也许人总是会这样,总觉得没走的另一条路也许走起来更畅通。

  

  Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

  解题思路:本题的思路与2 sum类似,首先对数组进行排序,然后依次把每位数字当做target,用类似于处理2 sum的思路进行两边扫描向中间逼近的处理。只是在此题中要注意重复的问题。

  左数从i+1开始,可以理解为处理的sum[i]作为三个数中的最左值,从此数的右边第一位和数据的最后一位向中间靠拢寻找符合的数字组合。如果把sum[i]作为中间的值来处理则存在找出重复数组的风险,如下:

input:-1、-1、0、1、2
output:[-1,-1,2] [0,-1,1] [1,-1,0]....//可以看到如果允许跨过target本身去寻找,就存在重复的风险
int left = i + 1;
int right = nums.size() - 1;

因为数组已经是排过序的,因此检查如下语句,避免作为左值的数重复。

if(i > 0 && nums[i] == nums[i - 1]) //continue;

  数组中可能存在不止一组数字的和与target相加的值等于零,因此两边继续向内扫描,如下两句则是避免中间数字和右边数字重复的问题。

while(left < right && nums[left] == nums[left + 1]) left++;
while(left < right && nums[right] == nums[right -1 ]) right--;

  

  完整代码如下:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> resl;int length = nums.size();if(length < 3)return resl;sort(nums.begin(), nums.end());for (int i = 0; i < nums.size() - 1; ++i){if(i > 0 && nums[i] == nums[i - 1])continue;int left = i + 1;int right = nums.size() - 1;while(left < right){vector<int> temp;if(nums[i] + nums[left] + nums[right] == 0){temp.push_back(nums[i]);temp.push_back(nums[left]);temp.push_back(nums[right]);while(left < right && nums[left] == nums[left + 1]) left++;while(left < right && nums[right] == nums[right -1 ]) right--;left++;right--;}else if (nums[i] + nums[left] + nums[right] < 0)++left;else --right;if(temp.size() > 0)resl.push_back(temp);}}return resl;}
};

  

转载于:https://www.cnblogs.com/echo-lsh/p/6496911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 函数循环、延时、节流、防抖

函数循环(setInterval) 间隔指定的毫秒数不停地执行指定的代码 <button onclick"myStartFunction()">开始</button> <button onclick"myStopFunction()">停止</button><script> var myVar null; //全局function myTimer…

bash知识点:文件测试

bash知识点&#xff1a;文件测试&#xff08;测试文件是否存在&#xff0c;文件是某种类型&#xff09;单目测试-e file:测试文件是是否存在-a file&#xff1a;测试文件是是否存在-f file&#xff1a;测试是否为普通文件,是为真&#xff0c;否则为假-d file&#xff1a;测试是…

MVC 4 教程

MVC4 前件&#xff1a;visual studio 10 sp1 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 &#xff08;by Rick Anderson&#xff09; Music Store (by Jon Galloway) http://www.asp.net/mvc/tutorials/mvc-music-sto…

Linux下java/bin目录下的命令集合

Linux下JAVA命令&#xff08;1.7.0_79&#xff09; 命令 详解 参数列表 示例 重要程度 资料 appletviewer Java applet 浏览器。appletviewer 命令可在脱离万维网浏览器环境的情况下运行 applet。 Usage: appletviewer <options> url(s) where <options> …

火车采集小结

采集一个页面全部内容的正则&#xff1a;^(?<content>[\s\S]*?)$转载于:https://www.cnblogs.com/afish/p/3984680.html

vscode 开发常用

设置缩进空格&#xff1a;2个| 4个 文件–》首选项–》设置 代码缩进对齐 &#xff1a; Ctrl [ 和 Ctrl ] 实现文本的向左移动或者向右移动&#xff1b; Shift Alt F 实现代码的对齐

新手应该如何Javascript,JDom,JQuery,DWZ。。

作为web前端程序员来说想必这些东西大家都很熟悉了...但是作为初学者来说,如何学习 是一个很重要的问题,其实这些东西并不难,只是我们在学习的时候没有理清楚他们之间的概念导致我们盲目的学习, 以我自己为例子&#xff0c;希望能帮助到大家的学习。 在这之前我假设大家理解了…

gulp+PC前端静态页面项目开发

前言&#xff1a; 现在单页面很流行&#xff0c;但是在 PC 端多页面还是常态&#xff0c;所以构建静态页面的工具还有用武之地 gulp构建前言&#xff1a; 如今我们开发web网页的方式主要有几种&#xff0c;使用vue-cli、create-react-app、webpack、不借助构建工具等实现单页…

Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

struts2中的Action接收表单传递过来的参数有3种方法&#xff1a; 如&#xff0c;登陆表单login.jsp&#xff1a; 1 <form action"login" method"post"name"form1"> 2 3 4   用户名&#xff1a;<s:textfieldname"username&quo…

【Linux】vi编辑器命令

1)进入vi的命令 vi filename : 打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename : 打开文件&#xff0c;并将光标置于第n行首 vi filename : 打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename: 打开文件&a…

The Architecture of Open Source Applications

http://www.aosabook.org/en/index.html 有 nginx http://www.aosabook.org/en/nginx.html转载于:https://www.cnblogs.com/cloudstorage/archive/2012/07/12/2588196.html

html2canvas生成海报的各种问题

html2canvas&#xff08;一&#xff09;官网下载安装&#xff08;二&#xff09;基础用法&#xff08;三&#xff09;生成海报问题canvas高分屏下的模糊问题html2canvas图片模糊问题canvas图片getImageData,toDataURL跨域问题1) 首先&#xff0c;图片服务器需要配置Access-Cont…

Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。

目标&#xff1a; Bootstrap中DropDown插件显示下拉列表&#xff0c;点击下拉列表区域&#xff0c;不会再自动关闭。 参考&#xff1a;http://v3.bootcss.com/javascript/#dropdowns // http://stackoverflow.com/questions/19740121/keep-bootstrap-dropdown-open-when-cl…

前端字符串内HTML标签无效的处理方式

1&#xff09;将元素的innerText 赋值成 元素的 innerHTML。即可避免转义的问题&#xff0c;将字符串中包含的 HTML标签生效。 <div ref"introContent" class"intro__content">{{intro}}</div>mounted() {// let text this.$refs.introConte…

获取当前目录绝对路径

echo offecho 当前盘符&#xff1a;%~d0echo 当前盘符和路径&#xff1a;%~dp0echo 当前批处理全路径&#xff1a;%~f0echo 当前盘符和路径的短文件名格式&#xff1a;%~sdp0echo 当前CMD默认目录&#xff1a;%cd%echo 目录中有空格也可以加入""避免找不到路径echo 当…

【CSS】css特殊性-优先级-权重

注&#xff1a;文章来源&#xff1a;《css权威指南》 第三章。 部分未予记录css选择器可以用多种方式去选择元素&#xff0c;实际上一个元素可以由使用两个或者多个规则来匹配&#xff0c;每个规则都有各自的选择器。请看例子CSS:h1 {color: red;}body h1 {color: green;}h2.gr…

vue开发问题积累

mounted钩子中使用$refs出现undefined 原因&#xff1a;如果在DOM结构中的某个DOM节点使用了v-if、v-show或者v-for&#xff08;即根据获得的后台数据来动态操作DOM&#xff0c;即响应式&#xff09;&#xff0c;那么这些DOM是不会再mounted阶段找到的。 **解决方法&#xff1…

动态规划0—1背包问题

动态规划0-1背包问题 问题描写叙述&#xff1a;给定n种物品和一背包。物品i的重量是wi&#xff0c;其价值为vi&#xff0c;背包的容量为C。问应怎样选择装入背包的物品&#xff0c;使得装入背包中物品的总价值最大?对于一种物品&#xff0c;要么装入背包&#xff0c;要么不装。…

Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释

本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 &#xff0c;对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点&#xff0c;用红色标记 1. Task是包含一系列Activity的堆栈, 遵循先进后出原则. 2. Task默认行为: (1) 前提: Activity A和Ac…

vmstat命令详解

参数详情&#xff1a; r runingb blockswpd 虚拟内存使用时间free 物理free内存buff 从硬盘--->内存的 缓冲cache 从内存--->硬盘的 缓存si 从磁盘写入swap的大小/sso 从swap写入磁盘的大小/sbi 块设备每秒接收的块数量bo 块设备每秒发送的块数量cs 每秒上下文切换次数us…