LeetCode之3Sum

来源:互联网 发布:adobe mac破解版 编辑:程序博客网 时间:2024/04/30 03:10
/*先对数组进行排序。然后用左右夹逼的方法,不断搜索结果。不过要注意避开重复元素。方法参考自:https://github.com/soulmachine/leetcode*/class Solution {public:vector<vector<int> > threeSum(vector<int> &num) {vector<vector<int> > result;if(num.size() < 3) return result;std::sort(num.begin(), num.end());for(int i = 0; i < num.size() - 2; ++i){if( i > 0 && num[i] == num[i-1]) continue;int j = i + 1, k = num.size() - 1;while(j < k){if(num[i] + num[j] + num[k] < 0){++j;while(num[j] == num[j-1] && j < k) ++j;}else if(num[i] + num[j] + num[k] > 0){--k;while(num[k] == num[k+1] && j < k) --k;}else{int tmp[3] = {num[i], num[j], num[k]};result.push_back(vector<int>(tmp, tmp + 3));++j;--k;while(num[j] == num[j-1] && num[k] == num[k+1] && j < k){++j;--k;}}}}return result;}};

0 0
原创粉丝点击