• 4Sum


    Given an array S of n integers, are there elements abc, 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)

    思路:
    类似前3题,不过在外层是两层循环。要注意判断重复的情况。
    代码:
     1     vector<vector<int> > fourSum(vector<int> &num, int target) {
     2         // IMPORTANT: Please reset any member data you declared, as
     3         // the same Solution instance will be reused for each test case.
     4         vector<vector<int> > result;
     5         vector<int> tmp;
     6         result.clear();
     7         tmp.clear();
     8         int i,j,k,t;
     9         int len = num.size();
    10         if(len < 4)
    11             return result;
    12         sort(num.begin(), num.end());
    13         for(i = 0; i < len-3; i++){
    14             while(i > 0 && num[i] == num[i-1])
    15                 i++;
    16             for(j = i+1; j < len-2; j++){
    17                 while(j > i+1 && num[j] == num[j-1])
    18                     j++;                    
    19                 k = j+1;
    20                 t = len-1;
    21                 while(k<t){
    22                     while(k > j+1 && num[k] == num[k-1])
    23                         k++;
    24                     while(t < len-1 && num[t] == num[t+1])
    25                         t--;
    26                     if(k>=t)
    27                         break;
    28                     int total = num[i] + num[j] + num[k] + num[t];
    29                     if(total < target)
    30                         k++;
    31                     else if(total > target)
    32                         t--;
    33                     else{
    34                         tmp.push_back(num[i]);
    35                         tmp.push_back(num[j]);
    36                         tmp.push_back(num[k]);
    37                         tmp.push_back(num[t]);
    38                         result.push_back(tmp);
    39                         tmp.clear();
    40                         k++;
    41                         t--;
    42                     }
    43                 }
    44             }
    45         }
    46         return result;
    47     }
  • 相关阅读:
    oracle 体系结构
    Oracle存储过程语法
    oracle 触发器
    oracle 存储过程
    oracle 高水位线详解
    oracle索引总结
    Oracle的表空间、数据文件、用户
    Oracle实例和数据库区别
    [whu1564]后缀数组
    [hdu4552]最长公共前缀
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3413283.html
Copyright © 2020-2023  润新知