454.四数相加II
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
dict_SumAB = {}
for i in nums1:
for j in nums2:
sumAB = i + j
if sumAB in dict_SumAB:
dict_SumAB[sumAB] += 1
else:
dict_SumAB[sumAB] = 1
count = 0
for m in nums3:
for n in nums4:
target = 0 - (m + n)
if target in dict_SumAB:
count += dict_SumAB[target]
return count
- 赎金信
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
nums = [0] * 26
for i in magazine:
nums[ord(i) - ord("a")] += 1
for i in ransomNote:
nums[ord(i) - ord("a")] -= 1
for x in nums:
if x < 0:
return False
return True
- 三数之和
nums.sort()
n = len(nums)
result = []
for i in range(n):
# 初步筛查,排序后的数组,如果某个值开始大于0,则后面的数就不用再判断了
if nums[i] > 0:
return result
# i去重
if i > 0 and nums[i] == nums[i - 1]:
continue
# 双指针
left = i + 1
right = n - 1
while right > left:
sum_ = nums[i] + nums[left] + nums[right]
if sum_ > 0:
right -= 1
elif sum_ < 0:
left += 1
else:
result.append([nums[i], nums[left], nums[right]])
# 左右指针去重
while right > left and nums[right] == nums[right - 1]:
right -= 1
while right > left and nums[left] == nums[left + 1]:
left += 1
right -= 1
left += 1
return result