【LeetCode】18. 4Sum 四数之和
- 作者: 负雪明烛
- id: fuxuemingzhu
- 个人博客:http://fuxuemingzhu.cn/
- 个人公众号:负雪明烛
- 本文关键词:four sum, 4sum, 四数之和,题解,leetcode, 力扣,Python, C++, Java
目录
- 题目描述
- 题目大意
- 解题方法
- 遍历
- 相似题目
- 参考资料
- 日期
题目地址:https://leetcode.com/problems/4sum/description/
题目描述
Given an array nums
of n integers and an integer target
, are there elements a, b, c, and d in nums
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.
Example:
Given array nums = [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]
]
题目大意
找出一个数组中所有的和为target的四个数字,要求返回的结果里面不准有重复的四元组。
解题方法
遍历
总结一下 K-sum 题目。
- 首先先排序
- 然后用 K−2K - 2K−2 个指针做
O(N^(K - 2))
的遍历 - 剩下 2 个指针从第 2 步的剩余区间里面找,找的方式是使用两个指针 p, q 分别指向剩余区间的首尾,判断两个指针的和与 target - 第2步的和的关系,对应的移动指针。即如果两个数的和大了,那么, q–;如果两个数的和小了,那么,p++;等于的话,输出结果。要时刻注意 p < q.
- 用 p,q 查找剩余区间结束之后,需要移动前面的K-2个值,这里需要在移动的过程中做个去重,找到和前面不同的值继续查找剩余区间。
时间复杂度是O(N^3),空间复杂度是O(1).
class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""N = len(nums)nums.sort()res = []i = 0while i < N - 3:j = i + 1while j < N - 2:k = j + 1l = N - 1remain = target - nums[i] - nums[j]while k < l:if nums[k] + nums[l] > remain:l -= 1elif nums[k] + nums[l] < remain:k += 1else:res.append([nums[i], nums[j], nums[k], nums[l]])while k < l and nums[k] == nums[k + 1]:k += 1while k < l and nums[l] == nums[l - 1]:l -= 1k += 1l -= 1while j < N - 2 and nums[j] == nums[j + 1]:j += 1j += 1 # 重要while i < N - 3 and nums[i] == nums[i + 1]:i += 1i += 1 # 重要return res
相似题目
Two Sum
Two Sum II - Input array is sorted
15. 3Sum
16. 3Sum Closest
923. 3Sum With Multiplicity
454. 4Sum II
参考资料
https://blog.csdn.net/MebiuW/article/details/50938326
日期
2018 年 10 月 30 日 —— 啊,十月过完了
【LeetCode】18. 4Sum 四数之和相关推荐
- 18. 4Sum 四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...
- Leetcode(18)-四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...
- leetcode系列--454.四数之和Ⅱ
leetcode 第454题 四数之和Ⅱ 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 &l ...
- Leedcode编程题18: 四数之和----C++实现
目的 旨在记录在Leedcode网上刷题的过程,记录心得. 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 ...
- 代码随想录算法训练营第七天|454、四数相加Ⅱ 383、赎金信15、三数之和18、四数之和
454.四数相加Ⅱ.383.赎金信.15.三数之和四数之和 四数相加 对于四数相加,我们可以定义一个map用来记录nums1与nums2的和对应次数,再遍历nums3与nums4,如果存在c与d使得a ...
- 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结
LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...
- leetcode系列--18.四数之和
leetcode系列–18.四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target .请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], ...
- LeetCode 17电话号码的字母组合(搜索)18四数之和
电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...
- 4. Leetcode 18. 四数之和 (数组-双向双指针)
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target .请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] ( ...
- 代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、15. 三数之和、18. 四数之和
454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, ...
最新文章
- 树莓派视觉小车 -- OpenCV巡线(HSL色彩空间、PID)
- JavaScript入门(part5)--数据类型转换
- PDFlib免费下载地址及详细介绍手册
- VB.NET 中的 As New 以及型別指定
- Sublime配置VI插件后 快捷键总结
- 极简代码(二)—— 内积
- 一次解锁三个BIG分析图制作思路,畅快!
- WindowsServer2003 2008R2架设ASP网站实战
- 美版iPhone4卡贴解锁
- 游戏网络同步——MMO位置同步
- 腾讯云TRTC接入测试以及状态同步功能重点验证
- 后台系统的权限控制与管理
- MySQL的varchar水真的太深了——InnoDB记录存储结构
- 访问局域网中的虚拟机(详细教程!)
- 计算机考研专业课考研真题,计算机考研专业课真题.docx
- 阿布扎比欢迎全世界所有已接种疫苗的旅行者,该政策9月5日起生效
- AES DES比较分析
- 新手带项目那些事儿(0.15-1.07)
- 转发:区块链产业平台建设领域发展情况:公有链/联盟链/BaaS是三种较主流平台模式
- 【机器学习实验】用Python进行机器学习实验