leetcode系列–18.四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
// 参考三数之和
// 排序加双指针 判断条件多点
// 时间复杂度是 O(n^3)
var fourSum = function (nums, target) {// 数组长度const length = nums.length;const result = []// 数组需要排序nums.sort((a, b) => a - b)// 特殊情况处理if (nums === null && nums.length < 4) {return []}for (let i = 0; i < length - 3; i++) {// 去重if (i > 0 && nums[i] === nums[i - 1]) {continue}// 满足当前条件的话就意味着当前i不用看了,肯定不行if (nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) {break;}// 当前循环的最大值if (nums[i] + nums[length - 1] + nums[length - 2] + nums[length - 3] < target) {continue}for (let j = i + 1; j < length - 2; j++) {if (j > i + 1 && nums[j] === nums[j - 1]) {continue}// 满足当前条件的话就意味着当前j不用看了,肯定不行if (nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target) {break}if (nums[i] + nums[j] + nums[length - 1] + nums[length - 2] < target) {continue}let l = j + 1, // 左指针r = length - 1; // 右指针while (l < r) {const sum = nums[i] + nums[j] + nums[l] + nums[r]if (sum === target) {result.push([nums[i], nums[j], nums[l], nums[r]])while (l < r && nums[l] === nums[l + 1]) {l++}l++while (l < r && nums[r] === nums[r - 1]) {r--}r--} else if (sum < target) {l++} else {r--}}}}return result
};

leetcode系列--18.四数之和相关推荐

  1. leetcode系列--454.四数之和Ⅱ

    leetcode 第454题 四数之和Ⅱ 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 &l ...

  2. 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结

    LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  3. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

  4. 代码随想录算法训练营day07| 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

    Leetcode 454.四数相加II 题目链接 思路:求四数相加之和,将四数两两相加,判断两两相加的数是否和为0 定义一个map,key放两数之和,value放两数之和出现的次数 两层for循环将前 ...

  5. 代码随想录算法训练营第6天 | 454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和

    一.Leetcode 454. 四数相加 II 相当于两数相加.但是呢很巧妙的是,卡哥在遍历CD数组时把查哈希表的方法融入了进去.学习一下. 二.Leetcode 383. 赎金信 更简单了,主要是审 ...

  6. 代码随想录算法训练营第七天| 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

    Leetcode 454.四数相加II 思路分析: 本题直观的想法是采取暴力法,四数相加就用四层for循环.虽然能得到结果,但时间复杂度为o(n4),当数组长度较大时,Leetcode便提示超时.该方 ...

  7. 代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和

    代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和 LeetCode 454 四数相加II 题目链接: 454.四数相加II class Soluti ...

  8. 代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、15. 三数之和、18. 四数之和

    454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, ...

  9. Suzy找到实习了吗Day 7 | 哈希表结束啦 454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和

    454. 四数相加 II(dict hash) 题目 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

最新文章

  1. Hive Shell 常用命令
  2. 3. PowerShell --基本操作,Alias,输出
  3. XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
  4. Unity3D学习笔记(2)脚本创建以及执行过程概述
  5. 无pygame写一个python贪吃蛇
  6. web中HTTP协议详解
  7. mina框架CumulativeProtocolDecoder.doDecode方法浅析
  8. java 渲染_Java字体渲染
  9. 浙江大学计算机科学与技术学院导师,浙江大学计算机科学与技术学院导师介绍:杨莹春...
  10. gimtehseet工时管理系统介绍
  11. 计算机网络---传输层
  12. Python实现相空间重构求关联维数——GP算法、自相关法求时间延迟tau、最近邻算法求嵌入维数m
  13. 华为android9手机短信不提醒设置,华为手机微信不提醒怎么办 华为收不到微信提示信息多种解决方法...
  14. swagger初体验
  15. 技术美术知识学习_06:关于法线贴图详解
  16. 尼龙毛柱分离T细胞法操作指南
  17. hdfs datanode 清除回收站的命令
  18. Socks代理上网工具 tsocks
  19. MotionLayout MotionScene 动画从未如此简单!
  20. 不想手动再配置logging?那可以试试loguru

热门文章

  1. python计算相似矩阵
  2. mysql 主键自增语句_MySQL 自增主键
  3. Frond End Allocator(前端分配器)
  4. 正确姿势避坑 Python 中的6个典型错误
  5. 视频教程-Spring Cloud微服务--入门到精通-Java
  6. 循环右移, c = c ~(~0 (32-n))
  7. python错误Errors与异常Exceptions
  8. 江苏区块链产业发展试点公示 点燃苏州数字经济新引擎
  9. Field 'userID' doesn't have a default value问题
  10. 电感检测_开路检测电路中的贴片电感器