1679-max-number-of-k-sum-pairs¶
Try it on leetcode
Description¶
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
Solution(Python)¶
class Solution:
def maxOperations(self, nums: List[int], k: int) -> int:
return self.hashing(nums, k)
# Time Complexity: O(n^2*OP)
# Space Comeplxity: O(n)
def bruteforce(self, nums, k):
s = Counter(nums)
cnt = 0
print(s)
while True:
change = 0
for key in list(s):
if change:
break
if k - key in s:
s[key] -= 1
s[k - key] -= 1
if s[key] <= 0:
del s[key]
if s[k - key] <= 0:
del s[k - key]
change += 1
print(s, cnt)
if change > 0:
cnt += change
else:
return cnt
# Time Complexity: O(nlogn)
# Space Complexity: O(1)
def sorting(self, nums: List[int], k: int) -> int:
nums.sort()
i, j = 0, len(nums) - 1
cnt = 0
while i < j:
if nums[i] + nums[j] == k:
cnt += 1
i += 1
j -= 1
elif nums[i] + nums[j] > k:
j -= 1
else:
i += 1
return cnt
# Time Complexity: O(n)
# Space Complexity: O(n)
def hashing(self, nums: List[int], k: int) -> int:
hash = defaultdict(int)
cnt = 0
for num in nums:
target = k - num
if hash[target] > 0:
hash[target] -= 1
cnt += 1
else:
hash[num] += 1
return cnt