Like 3sum, sort first, which is the next two for loops, and then set two pointers to traverse the last array. Pay attention to repeated issues here. For example, if the first item is the same as the previous one, it will be skipped, because the previous search certainly contains the current situation.
// 4Sum. cpp: defines the entry point of the console application. // # 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 <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 <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