leedcode 3Sum
来源:互联网 发布:上海大学乐乎硬盘 编辑:程序博客网 时间:2024/06/06 16:33
题意: 就是给一个数组,然你求出里面 3个数和为0的 组合,然后存在vector里返回,数字可以不连续
1.如果n3复杂度肯定不行,所以用n2的复杂度,固定一个数,然后求那两个数的和等于第一个确定的数的负数即可,当然先按照升序排好,注意vector的排序方法,用.begin(),.end()
2.用两指针思路,在固定一个的同时,两个指针一个从前一个从后像内缩,指导两个指针碰上。
3.一个非常重要的错误!!!!
下面是正确的代码,用的for循环
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { sort(num.begin(),num.end()); vector<vector<int> > result; if(num.size()<3) return result; for(int i = 0;i < num.size()-1;i++){ if(i!=0 && num[i] ==num[i-1]) continue; int j = i + 1, k = num.size()-1; int sum; while(j < k){ sum = num[i] + num[j] + num[k]; if(sum== 0) { vector<int> one; one.push_back(num[i]); one.push_back(num[j]); one.push_back(num[k]); result.push_back(one); while(++j<k&&num[j]==num[j-1]){} while(j<--k&&num[k]==num[k+1]){} } else if(sum <0) j++; else k--; } } return result; }};下面的是错误的代码,唯一不同的是while循环
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { sort(num.begin(),num.end()); vector<vector<int> > result; if(num.size()<3) return result; int i = 0; while(i < num.size()-1){ if(i!=0 && num[i] ==num[i-1]) continue; int j = i + 1, k = num.size()-1; while(j < k){ if(num[j]+num[k]+num[i] == 0) { vector<int> one; one.push_back(num[i]); one.push_back(num[j]); one.push_back(num[k]); result.push_back(one); while(++j<k&&num[j]==num[j-1]){} while(j<--k&&num[k]==num[k+1]){} } else if(num[j]+num[k]+num[i] <0) {j++;} else {k--;} } i++; } return result; }};
卧槽,找了一个上午的问题,后来发现循环改成for就好使了,后来经高人指点,原来问题在于第一次判断
if(i!=0 && num[i] ==num[i-1]) continue;while循环完全等价于for循环,除非里面有continue的情况!!!!!!!也就是说如果有continue,就不加了,那循环就跑不动了
这回记忆深刻了
0 0
- leedcode 3Sum
- two sum(from leedcode)----map和哈希表
- [LeedCode OJ]#64 Minimum Path Sum
- Leedcode
- leedcode
- 【leedcode】 Add to List 303. Range Sum Query
- LeedCode(3) - Longest Substring Without Repeating Characters
- leedcode做题总结,题目Sum Root to Leaf Numbers 2013/02/18
- LEEDCODE 234
- Leedcode题解
- Two Sum && 3 Sum
- 【Leetcode】3Sum (Sum)
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- leetcode 2 sum 3sum 4sum
- 2Sum 3Sum 4Sum
- cocos2d-x action执行完毕的回调
- 关于ADT新旧版本替换和更新的问题
- 数学建模学习笔记(第四章:5个静态优化实例分析学习)
- Ajax_JQuery
- iOS_文件操作 NSNumber NSValue NSDate
- leedcode 3Sum
- 博科光纤交换机配置及管理 CLI篇
- leetcode_141_Linked List Cycle
- /proc/sys/vm参数(转)
- 解压报错缺少分卷
- Android 关闭日志
- 聊聊JVM的年轻代
- 通过动态设置ListView高度来解决ScollView与ListView互相嵌套的问题
- Android SQLite