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
class Solution:
def maxOperations(self, nums: List[int], k: int) -> int:
nums.sort()
l, r, ans = 0, len(nums) - 1, 0
while l < r:
s = nums[l] + nums[r]
if s == k:
ans += 1
l, r = l + 1, r - 1
elif s > k:
r -= 1
else:
l += 1
return ans
class Solution {
public int maxOperations(int[] nums, int k) {
Arrays.sort(nums);
int l = 0, r = nums.length - 1;
int ans = 0;
while (l < r) {
int s = nums[l] + nums[r];
if (s == k) {
++ans;
++l;
--r;
} else if (s > k) {
--r;
} else {
++l;
}
}
return ans;
}
}
class Solution {
public:
int maxOperations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int cnt = 0;
int i = 0, j = nums.size() - 1;
while (i < j) {
if (nums[i] + nums[j] == k) {
i++;
j--;
cnt++;
} else if (nums[i] + nums[j] > k) {
j--;
} else {
i++;
}
}
return cnt;
}
};
func maxOperations(nums []int, k int) int {
sort.Ints(nums)
l, r, ans := 0, len(nums)-1, 0
for l < r {
s := nums[l] + nums[r]
if s == k {
ans++
l++
r--
} else if s > k {
r--
} else {
l++
}
}
return ans
}