学习资料:https://programmercarl.com/0015.三数之和.html#其他语言版本
学习记录:
454.四数相加(hash_dict,前两个数一组遍历a+b,后两个数一组遍历找0-(a+b))
点击查看代码
class Solution:def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:hash_map = dict()for i in nums1:for j in nums2:key=i+jhash_map[key]=hash_map.get(key, 0)+1count = 0for i in nums3:for j in nums4:key=0-(i+j)if key in hash_map:count += hash_map[key]return count
点击查看代码
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:ran_list = [0]*26mag_list = [0]*26for i in ransomNote:index= ord(i)-ord('a')ran_list[index] += 1for i in magazine:index = ord(i)-ord('a')mag_list[index] += 1for i in range(26):if ran_list[i]<=mag_list[i]:passelse:return Falsereturn True
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []nums.sort()for i in range(len(nums)):if nums[i] > 0:return result# 第一次去重if i > 0 and nums[i] == nums[i-1]:continue# 双指针left = i + 1right = len(nums)-1while right > left:sum = nums[i]+nums[left]+nums[right]if sum < 0:left += 1elif sum > 0:right -= 1else:result.append([nums[i], nums[left], nums[right]])# 在收获了一个结果后,对后续结果进行去重while right>left and nums[right]==nums[right-1]:right -= 1while right>left and nums[left]==nums[left+1]:left += 1left += 1right -= 1return result
PS:18题明天再做吧,假期结束啦,今天吃土豆烧排骨、甜椒炒肉、糖醋莲白,幸福~~~