https://leetcode.com/problems/max-number-of-k-sum-pairs/submissions/
给定一个整数数组 nums 和一个整数 k。
在一次操作中,您可以从数组中选取两个总和等于 k 的数字并将其从数组中删除。
返回可以对数组执行的最大操作数。
我面临一个非常奇怪的问题,
class Solution {
public:
int maxOperations(vector<int>& nums, int k) {
unordered_map<int, int> seen;
int ans = 0;
int n=nums.size();
for(int i=0;i<n;i++)
seen[nums[i]]++;
for(auto ele: seen)
{
int b=k-ele.first;
if(b==ele.first){
ans+=seen[b]/2;
seen[b]=0;
}
else if(seen[b]>0 && seen[ele.first]>0)
{
ans+=min(seen[b],seen[ele.first]);
seen[ele.first]=0;
seen[b]=0;
}
}
return ans;
}
};
测试用例:
[29,26,81,70,75,4,48,38,22,10,51,62,17,50,7,7,24,61,54,44,30,29,66,83,6,45,24,49,42,31,10,6,88,48,34,10,54,56,80,41,19]
12
如果我只是使用有序地图而不是无序地图,那么我会得到正确的答案。我尝试使用许多打印语句来调试它,当我使用 see[b]>0 语句时,我可能会发现一些新元素被添加到我的地图中,但奇怪的部分是即使地图中存在 6在导致问题的无序地图的情况下,它仍然没有被遍历。
def max_k_pairs(nums, k):
nums.sort()
left = 0
right = len(nums)-1
count = 0
while left < right:
target_sum = nums[left] + nums[right]
if target_sum < k:
left +=1
elif target_sum > k:
right -=1
else:
left +=1
right -=1
count +=1
return count
nums = [1,3,2,4]
k = 5
print (max_k_pairs(nums, k))```