【10月打卡~Leetcode每日一題】18. 四數之和(難度:中等)
18. 四數之和
給定一個包含 n 個整數的陣列 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。
排序+雙指標
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
quadruplets = list()
if not nums or len(nums) < 4:
return quadruplets
nums.sort()
length = len(nums)
for i in range(length - 3):
if i > 0 and nums[i] == nums[i - 1]:
continue
if nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target:
break
if nums[i] + nums[length - 3] + nums[length - 2] + nums[length - 1] < target:
continue
for j in range(i + 1, length - 2):
if j > i + 1 and nums[j] == nums[j - 1]:
continue
if nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target:
break
if nums[i] + nums[j] + nums[length - 2] + nums[length - 1] < target:
continue
left, right = j + 1, length - 1
while left < right:
total = nums[i] + nums[j] + nums[left] + nums[right]
if total == target:
quadruplets.append([nums[i], nums[j], nums[left], nums[right]])
while left < right and nums[left] == nums[left + 1]:
left += 1
left += 1
while left < right and nums[right] == nums[right - 1]:
right -= 1
right -= 1
elif total < target:
left += 1
else:
right -= 1
return quadruplets
相關文章
- 10.5 每日一題 18. 四數之和每日一題
- 【1月打卡~Leetcode每日一題】86. 分隔連結串列(難度:中等)LeetCode每日一題
- Leetcode[陣列] 18. 四數之和LeetCode陣列
- LeetCode每日一題:兩數之和(No.1)LeetCode每日一題
- LeetCode每日一題 (32)1. 兩數之和LeetCode每日一題
- 每日一道 LeetCode (1):兩數之和LeetCode
- Day 7| 454.四數相加II 、383. 贖金信 、15. 三數之和 、18. 四數之和
- 18. 4Sum(Leetcode每日一題-2020.10.05)LeetCode每日一題
- LeetCode18:四數之和LeetCode
- 【LeetCode】每日一題129:求根到葉子節點數字之和LeetCode每日一題
- LeetCode 每日一題,用 Go 實現兩數之和的非暴力解法LeetCode每日一題Go
- day7雜湊表 454.四數相加II |383. 贖金信|15. 三數之和 |18. 四數之和
- [LeetCode] 4Sum 四數之和LeetCode
- 從零打卡leetcode之day 1--兩數之和LeetCode
- 程式碼隨想錄刷題day 7 | 雜湊表part02 454.四數相加II 383. 贖金信 15. 三數之和 18. 四數之和
- 每日一道演算法題:1.兩數之和演算法
- Leetcode第一題:兩數之和(3種語言)LeetCode
- Leetcode每日打卡20201001-----迴文數LeetCode
- [LeetCode 刷題] 1. 兩數之和LeetCode
- LeetCode題集-1- 兩數之和LeetCode
- 每日一道演算法, 《兩數之和》演算法
- 挑戰演算法題:四數之和演算法
- leetcode刷題.763. 劃分字母區間.每日打卡LeetCode
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- LeetCode 之 JavaScript 解答第一題 —— 兩數之和(Two Sum)LeetCodeJavaScript
- 程式碼隨想錄演算法訓練營day07|454.四數相加II,383.贖金信,15.三數之和,18.四數之和演算法
- LeetCode每日一題:自除數(No.728)LeetCode每日一題
- LeetCode每日一題:迴文數(No.9)LeetCode每日一題
- leetcode每日一題LeetCode每日一題
- 每日打卡
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- 18_四數之和
- #leetcode刷題之路1-兩數之和LeetCode
- leetCode解題記錄1 - 兩數之和LeetCode
- LeetCode每日一題:整數反轉(No.7)LeetCode每日一題
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- Leetcode每日一題(1)LeetCode每日一題