K 和对的最大数量 || Leetcode

问题描述 投票:0回答:1

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在导致问题的无序地图的情况下,它仍然没有被遍历。

c++ arrays hashtable unordered-map
1个回答
0
投票
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))```
© www.soinside.com 2019 - 2024. All rights reserved.