|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Judie 于 2023-6-4 22:36 编辑
You are given an integer array nums and an integer k.
In one operation, you can pick two numbers from the array whose sum equals k and 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 <= 105
1 <= nums[i] <= 109
1 <= k <= 109
Judy
Python hash tableclass Solution(object):
def maxOperations(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
d = {}
c = 0
for i, x in enumerate(nums):
if x in d and d[x] > 0:
c += 1
d[x] -= 1
elif k-x in d:
d[k-x] += 1
else:
d[k-x] = 1
return c
Sol1
Python slower? but oneliner! lol
https://leetcode.com/problems/ma ... p;envId=leetcode-75class Solution:
def maxOperations(self, nums, k):
cnt, ans = Counter(nums), 0
for val in cnt:
ans += min(cnt[val], cnt[k - val])
return ans//2
return (lambda c: sum(min(c[n], c[k-n]) for n in c))(Counter(nums))//2
|
|