|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 <= 109
1 <= k <= 109
Judy
Python hash table
- class 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-75
- class 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
复制代码
|
|