zoukankan      html  css  js  c++  java
  • 18. 4Sum(C++)

    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: 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]
    ]

    Solution :
     1 class Solution {
     2 public:
     3     vector<vector<int>> fourSum(vector<int>& nums, int target) {
     4         vector<vector<int>> res;
     5         if(nums.empty()) return res;
     6         std::sort(nums.begin(),nums.end());
     7         int len=nums.size();
     8         for(int i1=0;i1<len;i1++){
     9             for(int i2=i1+1;i2<len;i2++){
    10                 int i3=i2+1;
    11                 int i4=len-1;
    12                 while(i3<i4){
    13                     int sum=nums[i1]+nums[i2]+nums[i3]+nums[i4];
    14                     if(sum>target){
    15                         i4--;
    16                     }else if(sum<target){
    17                         i3++;
    18                     }else{
    19                         vector<int> tmp(4,0);
    20                         tmp[0]=nums[i1];
    21                         tmp[1]=nums[i2];
    22                         tmp[2]=nums[i3];
    23                         tmp[3]=nums[i4];
    24                         res.push_back(tmp);
    25                         while(i3<i4&&nums[i3]==tmp[2]) i3++;
    26                         while(i3<i4&&nums[i4]==tmp[3]) i4--;
    27                     }
    28                 }
    29                 while(i2+1<len&&nums[i2]==nums[i2+1]) i2++;
    30             }
    31             while(i1+1<len&&nums[i1]==nums[i1+1]) i1++;
    32         }
    33         return res;
    34     }
    35 };
  • 相关阅读:
    UISegmentControl
    UISegmentControl,UISwich,UIPageControl
    UIPageControl,UISlider
    UISlider
    触摸事件,响应者链和手势
    NIO Socket
    处理多线程问题的工具类
    Java多线程疑难点
    软中断和硬中断的联系与区别
    进程—内存描述符(mm_struct)
  • 原文地址:https://www.cnblogs.com/devin-guwz/p/6506891.html
Copyright © 2011-2022 走看看