程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 每日算法之十六:4sum

每日算法之十六:4sum

編輯:C++入門知識

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

  • Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
  • The solution set must not contain duplicate quadruplets.

        For example, given array S = {1 0 -1 0 -2 2}, and target = 0.
    
        A solution set is:
        (-1,  0, 0, 1)
        (-2, -1, 1, 2)
        (-2,  0, 0, 2)
    直接上代碼:

    最主要的還是進行去重。

    class Solution {
      public:
        vector > fourSum(vector &num, int target) {
             vector > ret;
            if(num.size()==0) return ret;
            sort(num.begin(),num.end());
            for(int i = 0;i0&&num[i] == num[i-1])
                    continue;
                for(int j = i+1;ji+1&&num[j] == num[j-1])
                        continue;
                    int k = j+1,t = num.size()-1;
                    while(kj+1&&num[k] == num[k-1])//這裡是if,而不是while.如果是while可能會越界,在每一次
                            {k++;continue;}     //指針變化之後都要進行判斷。避免越界的發生。
                   //這裡是contimue,而不是break.如果是while,也不能是break,因為可能導致t指針的重復。
    if(ttarget) t--; else { vector v; v.push_back(num[i]); v.push_back(num[j]); v.push_back(num[k]); v.push_back(num[t]); ret.push_back(v); k++;//哪一個變化都可以 } } } } return ret; }};

    
    





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved