首页 > 代码库 > [LeetCode]4 Sum
[LeetCode]4 Sum
类似3Sum,先排序,这后两重for循环,然后对最后的一个数组设两个指针遍历。这里注意重复的问题,例如第一重如果和前面一个数相同则跳过,因为前面的查找肯定包含了本次的情况。
// 4Sum.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <vector>#include <algorithm>#include <map>#include <iostream>using namespace std;class Solution {public: vector<vector<int> > fourSum(vector<int> &num, int target) { sort(num.begin(),num.end()); vector<vector<int>>res; if (num.size() < 4) return res; for (int i = 0; i < num.size()-3; i++) { if (i>0 && num[i] == num[i - 1]) continue; for (int j = i + 1; j < num.size() - 2; j++) { if (j>i + 1 && num[j] == num[j - 1]) continue; int p1 = j + 1,p2=num.size()-1; int sum = target - num[i] - num[j]; while (p1 < p2) { if (p1>j + 1 && num[p1] == num[p1 - 1]) { p1++; continue; } if (p2<num.size()-1&&num[p2] == num[p2 + 1]) { p2--; continue; } if (p1 >= p2) { break; } if (num[p1] + num[p2] == sum) { vector<int>tempV; tempV.push_back(num[i]); tempV.push_back(num[j]); tempV.push_back(num[p1]); tempV.push_back(num[p2]); res.push_back(tempV); p2--; } else if (num[p1]+num[p2]>sum) { p2--; } else{ p1++; } } } } return res; }};int _tmain(int argc, _TCHAR* argv[]){ Solution ss; vector<int>test; test.push_back(1); test.push_back(0); test.push_back(-1); test.push_back(0); test.push_back(-2); test.push_back(2); vector<vector<int> > res = ss.fourSum(test,0); for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[i].size(); j++) cout << res[i][j] << ","; cout << endl; } system("pause"); return 0;}
[LeetCode]4 Sum
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。