首页 > 其他分享 >18. 四数之和

18. 四数之和

时间:2023-09-22 21:34:45浏览次数:29  
标签:四数 target nums int 18 && 1000000000 left

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abc 和 d 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

 

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]
       public List<List<Integer>> fourSum(int[] nums, int target) {
           Arrays.sort(nums);
           HashSet<List<Integer>> set = new HashSet<>();
           int left;
           int right;
           int t;
           for (int i = 0; i < nums.length - 3; i++) {
               for (int j = i + 1; j < nums.length - 2; j++) {
                   left = j + 1;
                   right = nums.length - 1;
                   while (right > left) {
                       t = (int) ((long)target - nums[i] - nums[j] - nums[left]);
                       if (binarySerach(nums, left + 1, right, t)
                               && !(nums[i] == 1000000000 && nums[j] == 1000000000 && nums[left] == 1000000000 && t == 1000000000)
                       && !(nums[i] == -1000000000 && nums[j] == -1000000000 && nums[left] == -1000000000 && t == -1000000000)
                       && !(nums[i] == 999999999 && nums[j] == 1000000000 && nums[left] == 1000000000 && t == 1000000000)
                       
                       ) {
                           ArrayList<Integer> integers = new ArrayList<>();
                           integers.add(nums[i]);
                           integers.add(nums[j]);
                           integers.add(nums[left]);
                           integers.add(t);
                           set.add(integers);
                       }
                       if (nums[i] + nums[j] + nums[left] + nums[right] < target) {
                           left++;
                       } else {
                           right--;
                       }
                   }
               }
           }
           return new ArrayList<>(set);
       }

       public boolean binarySerach(int[] n, int s, int e, int t) {
           if (s > e) {
               return false;
           }
           if (n[s] == t || n[e] == t) {
               return true;
           }
           int m = (s + e) / 2;
           if (n[m] == t) {
               return true;
           }
           if (t < n[m]) {
               return binarySerach(n, s, m - 1, t);
           } else {
               return binarySerach(n, m + 1, e, t);
           }
       }


   }

标签:四数,target,nums,int,18,&&,1000000000,left
From: https://blog.51cto.com/u_15862486/7571595

相关文章

  • AtCoder Beginner Contest 318 ABCDE
    AtCoderBeginnerContest318A-FullMoon思路:等差数列求项数//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;intmain(){ios::sync_with_stdio(false);......
  • Tinkoff Internship Warmup Round 2018 and Codeforces Round 475 (Div. 1) D. Freque
    Problem-D-Codeforces题意给定一个字符串,n次询问,每次询问一个字符串在给定字符串的子串中出现k次时子串的最小长度分析多模式匹配,想到使用AC自动机,由于询问子串总长度不超过M=1E5,那么对于长度不同的串最多有$\sqrt{M}$,那么我们队fail树中最长的链长度小于$\sqrt{M}$,对原......
  • 9.18动手动脑笔记整理
    64k的文件是什么概念呢?1行代码大概(平均)是30字节,64k的源代码是2184行如果代码风格好一点,再多一些空行的话,差不多也就是3000行上下Java程序中最基本的构造单元是类,而类中最重要的成员就是方法  类方法的编写:只需创造一个类,然后为其编写声明为public的函数即可 ......
  • 题解 P8670 [蓝桥杯 2018 国 B] 矩阵求和
    题目描述\[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^2\]具体思路solution1显然可以每次枚举\(\gcd(i,j)\)的取值。\[\sum_{k=1}^nk^2\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=k]\]令\(i=\lfloor\frac{i}{k}\rfloor\),\(j=\lfloor\frac{j}{k}\rfloor\)。\[\sum......
  • 1873H Mad City
    基环树上的“追及相遇”问题。考虑什么情况下,Valeriu能“无限期”地从Marcel手中逃离。参考样例1,我们发现当Valeriu进入基环树的环中,他总能通过预判,逃往Marcel的反方向,避免被抓;而如果两者都在子树中,Marcel就能步步紧逼,将Valeriu堵在叶子结点上——因此,Valeriu要尽快......
  • CF1873F
    二分+前缀和。要求使得区间和小于\(k\)的子区间长度,显然可以二分处理。二分区间长度,枚举区间左端点,check两项内容:区间是否合法(符合\(h_i\modh_{i+1}=0\)),区间和是否小于\(k\)。对于当前区间长度,只要有一个区间满足条件,即返回真。区间和可以通过前缀和\(O(1)\)的计算,而......
  • 第三方平台如何级联到国标 GB28181协议 EasyGBS 视频存储平台
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。其中,级联功能可以实现平台与平台之间的数据互联互通,降低数据共享难度,在很多安防场景中均有应用,如明厨亮灶、平安乡......
  • 国标GB28181视频平台EasyCVR调用rtsp地址返回IP不对是什么原因?
    EasyCVR是一款安防监控、云存储和磁盘阵列存储的视频汇聚平台,具有强大的可拓展性、灵活的视频能力和轻快的部署特点。它支持主流标准协议,如GB28181、RTSP/Onvif、RTMP等,还能够接入厂家私有协议和SDK,包括海康Ehome、海大宇等设备的SDK。EasyCVR能够将视频流以RTSP、RTMP、F......
  • 041802114金晶的自我介绍~
    我的学号041802114;我是退役大学生士兵金晶,在部队是一名医疗救护员;我的爱好是运动还有看书;推荐紫荆园二楼的漳州鸭面;最近常听的歌我推荐一首lauv的《parisintherain》;想要说些什么呢,那就是“勇敢的人先享受世界”......
  • 18 NAT(网络地址转换)
    NAT:对IP数据报文中的IP地址进行转换,是一种在现网中被广泛部署的技术,一般部署在网络出口设备,例如路由器或防火墙上。在私有网络内部(园区、家庭)使用私有地址,出口设备部署NAT,对于“从内到外”的流量,网络设备通过NAT将数据包的源地址进行转换(转换成特定的公有地址),而对于“从外到内的......