zoukankan      html  css  js  c++  java
  • LeetCode OJ:4Sum(4数字之和)

    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)

    和前面的思路基本上是相同的,这里同样容易遇见相同的数,这个时候需要跳过,代码如下:

     1 class Solution {
     2 public:
     3     vector<vector<int>> fourSum(vector<int>& nums, int target) {
     4         sort(nums.begin(), nums.end());
     5         int sz = nums.size();
     6         vector<vector<int>> ret;
     7         for(int i = 0; i < sz; ++i){
     8             if(i != 0 && nums[i] == nums[i - 1])
     9                 continue;
    10             for(int j = i + 1; j < sz; ++j){
    11                 if(j > i + 1 && nums[j] == nums[j - 1])
    12                     continue;
    13                 for(int beg = j + 1, end = sz - 1; beg < end;){
    14                     while(beg > j + 1 && nums[beg] == nums[beg - 1])
    15                         beg++;
    16                     while(end < sz - 1 && nums[end] == nums[end + 1])
    17                         end--;
    18                     if(beg >= end) break;
    19                     int sum = nums[i] + nums[j] + nums[beg] + nums[end];
    20                     if(sum == target){
    21                         vector<int> tmp;
    22                         tmp.push_back(nums[i]);
    23                         tmp.push_back(nums[j]);
    24                         tmp.push_back(nums[beg]);
    25                         tmp.push_back(nums[end]);
    26                         ret.push_back(tmp);
    27                         beg++, end--;
    28                     }else if(sum < target){
    29                         beg++;
    30                     }else{
    31                         end--;
    32                     }
    33                 }
    34             }
    35         } 
    36         return ret;
    37     }
    38 };
  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    在PHP中PDO解决中文乱码问题的一些补充
    apache重写规则详解
    Apache的配置
    正则表达式30分钟入门教程
    LVS+keepalived搭建负载均衡
    php判断终端是手机还是电脑访问网站代码
    nginx 502 bad gateway
    算法复习-深度优先遍历和回溯法的关系
    分支限界法和回溯法对比
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4921928.html
Copyright © 2011-2022 走看看