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 <= numsi <= 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)。

相关推荐
智者知已应修善业8 小时前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
洛水水8 小时前
【力扣100题】86.柱状图中最大的矩形
算法·leetcode·职场和发展
渡之8 小时前
GRiM-Net 深度解析 | 无人机 GNSS 拒止场景下两阶段跨视角视觉定位框架
深度学习·算法·动态规划·无人机
测试仪器廖生135902563858 小时前
罗德与施瓦茨 FSP13频谱分析仪FSP30
网络·人工智能·算法
happymaker06268 小时前
LeetCodeHot100——560.和为K的子数组
算法
dtq04248 小时前
C语言刷题数组5,6(求平均值,求最大值)
c语言·数据结构·算法
郭梧悠9 小时前
Hash算法入门Hash冲突解决方案
算法·哈希算法
洛水水9 小时前
【力扣100题】81.寻找两个正序数组的中位数
数据结构·算法·leetcode
happymaker062610 小时前
LeetCodeHot100——155.最小栈
算法
洛水水10 小时前
【力扣100题】85.每日温度
算法·leetcode·职场和发展