题目:给你一个整数数组 nums
和一个整数 k
。每一步操作中,你需要从数组中选出和为 k
的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。
示例 1:
输入:nums = [1,2,3,4], k = 5 输出:2 解释:开始时 nums = [1,2,3,4]: - 移出 1 和 4 ,之后 nums = [2,3] - 移出 2 和 3 ,之后 nums = [] 不再有和为 5 的数对,因此最多执行 2 次操作。
示例 2:
输入:nums = [3,1,3,4,3], k = 6 输出:1 解释:开始时 nums = [3,1,3,4,3]: - 移出前两个 3 ,之后nums = [1,4,3] 不再有和为 6 的数对,因此最多执行 1 次操作。
思路:双指针。将整个数组进行排序,然后用双指针对数组前后进行计算,如果满足条件,前后指针各走一位,并计数加一。如果比目标值小,则前指针+1,再计算;如果大于目标值,则右指针-1,再计算。
class Solution:
def maxOperations(self, nums: List[int], k: int) -> int:
n = len(nums)
nums.sort()
res = 0
l , r = 0 , n - 1
while l < r:
if nums[l] + nums[r] == k:
res += 1
l += 1
r -= 1
elif nums[l] + nums[r] < k:
l += 1
else:
r -= 1
return res