【一看就会一写就废 指间算法】执行操作后的最大 MEX —— 同余、哈希表

指尖划过的轨迹,藏着最细腻的答案~

题目:

给你一个下标从 0 开始的整数数组 nums 和一个整数 value 。

在一步操作中,你可以对 nums 中的任一元素加上或减去 value 。

  • 例如,如果 nums = 1,2,3 且 value = 2 ,你可以选择 nums0 减去 value ,得到 nums = -1,2,3

数组的 MEX (minimum excluded) 是指其中数组中缺失的最小非负整数。

  • 例如,-1,2,3 的 MEX 是 0 ,而 1,0,3 的 MEX 是 2 。

返回在执行上述操作 任意次 后,nums 的最大 MEX 。

示例 1:

输入:nums = 1,-10,7,13,6,8, value = 5

输出:4

解释:执行下述操作可以得到这一结果:

  • nums1 加上 value 两次,nums = 1,0,7,13,6,8
  • nums2 减去 value 一次,nums = 1,0,2,13,6,8
  • nums3 减去 value 两次,nums = 1,0,2,3,6,8
    nums 的 MEX 是 4 。可以证明 4 是可以取到的最大 MEX 。

示例 2:

输入:nums = 1,-10,7,13,6,8, value = 7

输出:2

解释:执行下述操作可以得到这一结果:

  • nums2 减去 value 一次,nums = 1,-10,0,13,6,8
    nums 的 MEX 是 2 。可以证明 2 是可以取到的最大 MEX 。

提示:

  • 1 <= nums.length, value <= 1 0 5 10^5 105
  • 1 0 9 10^9 109 <= numsi <= 1 0 9 10^9 109

分析:

题目意思即对于数组nums中的每一个数字加减任意次value,寻找从0开始的没有出现的数字。

我们比较容易得可以想到余数,那怎么使用这个余数呢?如果nums[i]value取模的值为0,说明0出现,如果nums[j]value取模的值为1,说明1出现,以此类推......

那如果nums[t]value取模的值再次出现0,但0已经出现过了,此时说明value出现......value+1出现,以此类推,直到没有连续的值ans出现,即为答案。

需要注意负数的处理:将负数的取模映射到[0, m-1]中,可以使用公式: x % m o d + m o d x \% mod + mod x%mod+mod,那如果是正数,上面公式就不适配,需要判断正负,更通用的公式如下: ( x % m o d + m o d ) % m o d (x \% mod + mod) \% mod (x%mod+mod)%mod

AC代码:

c++ 复制代码
class Solution {
public:
    int findSmallestInteger(vector<int>& nums, int value) {
        unordered_map<int, int> cnt;
        for (int num : nums) {
            cnt[(num % value + value) % value]++;
        }

        int ans = 0;
        while (cnt[ans % value]-- > 0) {
            ans++;
        }

        return ans;
    }
};
相关推荐
张欣-男16 分钟前
3分钟理解线性代数
线性代数·算法
haon112220 分钟前
面试高频题与口述框架:怎么把经历讲成故事
面试·职场和发展
白狐_79820 分钟前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
小白说大模型20 分钟前
Hermes 全配置指南:从裸版到 AI Agent 天花板
大数据·人工智能·学习·算法·机器学习·数据挖掘
a1879272183131 分钟前
【算法】动态规划入门:从打家劫舍到状态设计的三堂课
算法·leetcode·动态规划·dp·回溯·暴力
淡海水10 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan10 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
黄敬峰11 小时前
Agent Memory 进阶:用 LLM 总结压缩上下文,告别"金鱼记忆"
面试
Tisfy11 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
乐迪信息12 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉