leetcode第一刷_3Sum
来源:互联网 发布:java中获取数组的长度 编辑:程序博客网 时间:2024/05/21 15:44
估计大家都会做twoSum,一头一尾两个指针,跟据和的大小移动就行了。
3sum能不能用相同的方法呢,我尝试用暴力做,居然过了。思路是先把数组排个序,让相同数字的都靠在一起,然后固定一个数,其他两个数就按照twosum的那一套来,只不过计算sum的时候多算了一个数而已。需要注意一个问题,靠在一起一样的数,只能在第一次遇到它的时候用,更准确一点说,每个相同的数,只有一次作为i或j或k的机会,而且不用担心是不是会漏掉情况,如果数组是111,要求3,这不都用了吗,是的,但是是i,j,k各用了他们一次。表达的不是很好,看代码应该就明白了。这个解法太暴力,不优雅。
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int> > res; if(num.size() <= 2) return res; sort(num.begin(), num.end()); for(int i=0;i<num.size()-2;i++){ if(i&&num[i-1] == num[i]) continue; int j = i+1; int k = num.size()-1; while(j<k){ if(j>i+1&&num[j] == num[j-1]) {j++; continue;} if(k<num.size()-1&&num[k]==num[k+1]){k--; continue;} int sum = num[i]+num[j]+num[k]; if(sum>0) k--; else if(sum<0) j++; else{ vector<int> tp_res; tp_res.push_back(num[i]); tp_res.push_back(num[j]); tp_res.push_back(num[k]); res.push_back(tp_res); j++; } } } return res; }};
0 0
- leetcode第一刷_3Sum
- leetcode第一刷_3Sum Closest
- 【LeetCode】15_3Sum
- 【LeetCode】16_3Sum Closest
- LeetCode 15_3Sum
- LeetCode 16_3Sum Closest
- LeetCode之15_3Sum
- LeetCode之16_3Sum Closest
- leetcode第一刷_Candy
- leetcode第一刷_Triangle
- leetcode第一刷_Combinations
- leetcode第一刷_Anagrams
- leetcode第一刷_Permutations
- leetcode第一刷_Triangle
- leetcode第一刷_4Sum
- 0016_3Sum Closest
- leetcode第一刷_Sort List
- leetcode第一刷_LRU Cache
- ASP.NET MVC与WCSF中MVP模式比较
- U003 UML 状态图
- myeclipse集成ant
- 图像超分辨率技术简述
- StAX的一个隐秘bug
- leetcode第一刷_3Sum
- 装饰器设计模式
- OSS技能助你成为职场香饽饽
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- linux字符设备驱动的 ioctl 幻数
- 操作系统值设备管理
- CF 346A Alice and Bob
- BlueTooth: 什么是蓝牙(Bluetooth)
- Linux device drivers学习笔记(5)——uart primary driver code