题目如下:
You are given an integer array
numsand an integerk.In one operation, you can pick two numbers from the array whose sum equals
kand remove them from the array.Return the maximum number of operations you can perform on the array.
Example 1:
Input: nums = [1,2,3,4], k = 5 Output: 2 Explanation: Starting with nums = [1,2,3,4]: - Remove numbers 1 and 4, then nums = [2,3] - Remove numbers 2 and 3, then nums = [] There are no more pairs that sum up to 5, hence a total of 2 operations.Example 2:
Input: nums = [3,1,3,4,3], k = 6 Output: 1 Explanation: Starting with nums = [3,1,3,4,3]: - Remove the first two 3's, then nums = [1,4,3] There are no more pairs that sum up to 6, hence a total of 1 operation.Constraints:
1 <= nums.length <= 1051 <= nums[i] <= 1091 <= k <= 109
解题思路:首先统计出每个num出现的次数,然后求num和k-num出现次数的较小值,即为这对组合可操作的次数,注意要考虑 num = k- num的情况。
代码如下:
class Solution(object): def maxOperations(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int """ dic = {} res = 0 for num in nums: dic[num] = dic.setdefault(num,0) + 1 for key in dic.iterkeys(): if dic[key] <= 0:continue elif k - key == key: res += dic[key]/2 dic[key] = dic[key] % 2 elif k - key in dic: pair = min(dic[key],dic[k-key]) res += pair dic[key] -= pair dic[k-key] -= pair return res