計蒜客 難題題庫 033 三個數的和
阿新 • • 發佈:2019-01-28
給定陣列S,判斷陣列中的元素知否存在a,b,c,使得a+b+c=0。
找出所有滿足條件的元素並輸出。
注意:元素a,b,c必須滿足 a ≤ b ≤ c解集不重複。
格式:第一行輸入一個數n,接下來一行輸入陣列S(n個元素),接下來輸出所有滿足條件的解集。
如果不存在,則不輸出任何東西。
例如:S = {-1 0 1 2 -1 -4}
則對應的解集為: (-1, 0, 1)和(-1, -1, 2)
提示:vector threeSum(vector &num)
樣例1
輸入:
6 3 0 -2 -1 1 2
輸出:
-2 -1 3 -2 0 2 -1 0 1
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int n, i, j, k; vector<int> vi; cin >> n; vi.resize(n); for(i = 0; i < n; ++i){ cin >> vi[i]; } sort(vi.begin(), vi.end()); int temp; for(k = 0; k + 2 < n; ++k){ while(k && k + 2 < n && vi[k - 1] == vi[k]){ ++k; } i = k + 1; j = n - 1; while(i < j){ temp = vi[k] + vi[i] + vi[j]; if(temp == 0){ cout << vi[k] << " " << vi[i] << " " << vi[j] << " " << endl; ++i; while(i < j && vi[i - 1] == vi[i]){ ++i; } --j; while(i < j && vi[j + 1] == vi[j]){ --j; } }else if(temp < 0){ ++i; }else{ --j; } } } }