给你一个整数数组
nums
和一个整数k
。每一步操作中,你需要从数组中选出和为
k
的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。
输入:nums = [1,2,3,4], k = 5 输出:2 解释:开始时 nums = [1,2,3,4]: - 移出 1 和 4 ,之后 nums = [2,3] - 移出 2 和 3 ,之后 nums = [] 不再有和为 5 的数对,因此最多执行 2 次操作。
思路:
先将数据进行从小到大排序,然后从队列两侧进行查找,这样性能会更高
int compareInts(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int maxOperations(int* nums, int numsSize, int k){
qsort(nums, numsSize, sizeof(int), compareInts);
int operations = 0;
int left = 0; // Start from the beginning of the array
int right = numsSize - 1; // Start from the end of the array
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == k) {
// Found a pair that sums up to k
operations++;
left++; // Move the left pointer one step to the right
right--; // Move the right pointer one step to the left
} else if (sum < k) {
// Increase the sum by moving the left pointer to the right
left++;
} else {
// Decrease the sum by moving the right pointer to the left
right--;
}
}
return operations;
}