LeetCode 1679.K和数对的最大数目

给你一个整数数组 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 <= nums.length <= 10 5 ^5 5

1 <= nums[i] <= 10 9 ^9 9

1 <= k <= 10 9 ^9 9

枚举nums,记录下当前数字的出现次数,如果之前出现过,就增加一次操作次数:

cpp 复制代码
class Solution {
public:
    int maxOperations(vector<int>& nums, int k) {
        unordered_map<int, int> cnt;
        int ans = 0;
        for (int i : nums) {
            if (cnt[k - i] == 0) {
                ++cnt[i];
            } else {
                ++ans;
                --cnt[k - i];
            }
        }
        return ans;
    }
};

如果nums的长度为n,nums中元素的种类数为m,则此算法时间复杂度为O(n),空间复杂度为O(m)。

相关推荐
MM_MS14 分钟前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E39 分钟前
【二分法】寻找峰值
算法
mit6.8241 小时前
位运算|拆分贪心
算法
ghie90901 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体11 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9981 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx2 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++2 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd2 小时前
C++引用:高效编程的别名利器
算法
鱼跃鹰飞3 小时前
Leetcode1891:割绳子
数据结构·算法