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

    方针:

    1. sort数组
    2. 固定前三个(i1,i2,i3初始化,逐次偏移+1),从后往前移动最后一个(i4)。
    3. 判断4数之和==target break;

    问题:

    1. 数组含有重复数字

      解决:if(ix==ix-1) then continue;

    2.优化:执行时间长

      解决:

        过滤1,if(i1+..+ix 和其之后的连续n-x个数之和>target) then break;

        过滤2,if(i1+..+ix 和最后n-x个数之和<target) then continue(使得ix++,来增大ix);

     1 class Solution {
     2 public:
     3     static bool sortfun(const int a, const int b){
     4         return a<b;
     5     }
     6     vector<vector<int>> fourSum(vector<int>& nums, int target) {
     7         int i1,i2,i3,i4,n=nums.size();
     8         vector<vector<int>> res={};
     9         if(n<4) return res;
    10         sort(nums.begin(), nums.end(), sortfun);
    11         for(i1=0; i1<n-3; i1++){
    12             if(i1>0 && nums[i1] == nums[i1-1]) continue;
    13             if(nums[i1]+nums[i1+1]+nums[i1+2]+nums[i1+3]>target) break;
    14             if(nums[i1]+nums[n-3]+nums[n-2]+nums[n-1]<target) continue;
    15             for(i2=i1+1; i2<n-2; i2++){
    16                 if(i2>i1+1 && nums[i2] == nums[i2-1]) continue;
    17                 if(nums[i1]+nums[i2]+nums[i2+1]+nums[i2+2]>target) break;
    18                 if(nums[i1]+nums[i2]+nums[n-2]+nums[n-1]<target) continue;
    19                 for(i3=i2+1; i3<n-1; i3++){
    20                     if(i3>i2+1 && nums[i3] == nums[i3-1]) continue;
    21                     if(nums[i1]+nums[i2]+nums[i3]+nums[i3+1]>target) break;
    22                     if(nums[i1]+nums[i2]+nums[i3]+nums[n-1]<target) continue;
    23                     for(i4=n-1; i4>i3; i4--){
    24                         if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==target){
    25                             res.push_back({nums[i1],nums[i2],nums[i3],nums[i4]});
    26                             break;
    27                         }
    28                     }
    29                 }
    30             }
    31         }
    32         return res;
    33     }
    34 };
  • 相关阅读:
    捋一下Redis
    docker 的简单操作
    opencv的级联分类器(mac)
    python日常
    pip安装显示 is not a supported wheel on this platform.
    字节流与字符流的区别详解
    请求转发和重定向的区别及应用场景分析
    Eclipse的快捷键使用总结
    Eclipse给方法或者类添加自动注释
    IntelliJ IDEA 连接数据库 详细过程
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12302794.html
Copyright © 2011-2022 走看看