Leetcode 面试题 16.24.数对和
1 题目描述(Leetcode题目链接)
设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]
提示:nums.length <= 100000
2 题解
记录每个数出现的次数,再分情况讨论。
class Solution:
def pairSums(self, nums: List[int], target: int) -> List[List[int]]:
res = []
if len(nums) <= 1: return res
dic = collections.Counter(nums)
for i in dic.keys():
j = target - i
if j in dic:
if i == j:
while dic[i] > 1:
res.append([i, j])
dic[i] -= 2
else:
while dic[i] > 0 and dic[j] > 0:
res.append([i, j])
dic[i] -= 1
dic[j] -= 1
return res
同样的思路,一个一个计数就可以。
class Solution:
def pairSums(self, nums: List[int], target: int) -> List[List[int]]:
res = []
dic = collections.defaultdict(int)
for i in nums:
if dic[target - i] > 0:
res.append([i, target - i])
dic[target - i] -= 1
else:
dic[i] += 1
return res