给你一个由 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
你可以按 任意顺序 返回答案 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/4sum

例:

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

解析:四数之和大致和三数之和相同,在三数之和外层多套一层即可。为了避免重复,需要对相同的值进行判定。最外层大循环,内层双指针,然后指针中间便利对比判断。

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""nums.sort()  # 排序n = len(nums)  # 长度res = []  # 初始化结果for i in range(n):  # 最外层if i > 0 and nums[i] == nums[i - 1]: continue  # 排除重复for k in range(i+1, n):  # 第二个值if k > i + 1 and nums[k] == nums[k-1]: continuep = k + 1  # 第三个值q = n - 1  # 第四个值while p < q:if nums[i] + nums[k] + nums[p] + nums[q] > target: q -= 1elif nums[i] + nums[k] + nums[p] + nums[q] < target: p += 1else:res.append([nums[i], nums[k], nums[p], nums[q]])while p < q and nums[p] == nums[p + 1]: p += 1  # 去重while p < q and nums[q] == nums[q - 1]: q -= 1  # 去重p += 1q -= 1return res

四数之和Python解法相关推荐

  1. 最接近的三数之和Python解法

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近. 返回这三个数的和. 假定每组输入只存在恰好一个解. 来源 ...

  2. 两数之和Python解法

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同 ...

  3. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

    作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...

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

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

  5. 力扣18. 四数之和(JavaScript)

    建立四个指针 四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[l ...

  6. 算法LeetCode解题(C++)-15. 四数之和(难度:中等)

    题目描述: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等 ...

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

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

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

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

  9. ❤️导图整理数组5: 四数之和 相比 三数之和 的大量优化, 力扣18详细注解❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

最新文章

  1. AI一分钟 | 阿里NLP技术连破两项世界纪录,玉泉一号AI试验卫星明年发射
  2. codebrag安装使用
  3. 纯API函数实现串口读写。
  4. 关于软件开发本质和开发方法的一些文章的读后感
  5. Haproxy+Nginx实现web负载均衡群集
  6. 第六届开源操作系统年度技术会议将在12月16日杭州浙江大学举办
  7. Proteus中8259的仿真[无dos,纯手工]
  8. ios 关于itunes安装ipa包的方法,一步解决
  9. 【数字图像处理】Canny边缘检测C语言实现
  10. 如何获取有价值的用户反馈?
  11. xml文件中空格输入
  12. 荣耀play5t活力版和荣耀畅玩20哪个好 哪个更值得入手
  13. .html扩展名的文件类型,JS 获取文件后缀,判断文件类型(比如是否为图片格式)...
  14. Matlab命令行乱码问题
  15. 模型转换:tensorflow2 模型转pb,pb转tflite
  16. linux平台下一个好用的并行压缩工具(cpu核数越多越快,比tar -j可以快很多倍)
  17. linux 配置主机名
  18. 2021年全球望远镜收入大约1161.6百万美元,预计2028年达到1275百万美元
  19. 核心单词Word List 45
  20. 10G Ethernet PCS/PMA IP 核

热门文章

  1. 什么是 ecommerce 的 distributor 概念以及如何实现 website redirect
  2. SAP Spartacus 和 SmartEdit 集成的一些 bug
  3. Github issue里MVP和Stretch label的区别
  4. SAP Spartacus list view里router-outlet的填充逻辑
  5. SAP Spartacus list.component.ts的listData$数据的触发逻辑
  6. rxjs 里的map operator
  7. SAP S/4HANA Customer Management(CRM)模块的扩展性设计
  8. SAP Analytics Cloud里的Smart Predict
  9. cannot find any entry in order attachment link
  10. SAP UI5 return sap.ui.view的实现