
2026-03-10:缺失的最小倍数。用go语言,给定一个整数数组 nums 和一个整数 k,找出最小的正整数 m,满足两点:m 是 k 的倍数(即可表示为 k·t,t 为正整数),且 m 不出现在 nums 中。换言之,求最小的正整数 t(t ≥ 1),使得 k·t 不属于 nums。
1 <= nums.length <= 100。
1 <= nums[i] <= 100。
1 <= k <= 100。
输入: nums = [8,2,3,4,6], k = 2。
输出: 10。
解释:
当 k = 2 时,其倍数为 2、4、6、8、10、12……,其中在 nums 中缺失的最小倍数是 10。
题目来自力扣3718。
我们以输入 nums = [8,2,3,4,6]、k = 2 为例,分阶段拆解执行逻辑:
missingMultiple 接收参数 nums = [8,2,3,4,6] 和 k = 2 后,首先创建一个空的布尔型哈希表 has(键是整数,值表示该整数是否存在于 nums 中)。nums 中的每一个元素,将元素作为键存入哈希表,值设为 true(表示该数存在):has[8] = truehas[2] = truehas[3] = truehas[4] = truehas[6] = true
最终哈希表 has 中存储的键值对为:8:true, 2:true, 3:true, 4:true, 6:true。x = k = 2,循环逻辑是每次将 x 增加 k(即找下一个 k 的倍数),直到找到不在哈希表中的 x。x = 2,检查 has[2] → 值为 true(说明 2 在 nums 中),因此 x += 2 → x = 4。x = 4,检查 has[4] → 值为 true(4 在 nums 中),x += 2 → x = 6。x = 6,检查 has[6] → 值为 true(6 在 nums 中),x += 2 → x = 8。x = 8,检查 has[8] → 值为 true(8 在 nums 中),x += 2 → x = 10。x = 10,检查 has[10] → 哈希表中无此键,值为 false(10 不在 nums 中),满足条件,返回 x = 10。main 函数中定义 nums = [8,2,3,4,6]、k = 2,调用 missingMultiple 函数得到返回值 10。fmt.Println(result),输出结果 10。nums,数组长度为 n(本题中 n = 5),这一步的时间复杂度是 O(n)。m 个 k 的倍数(m 是找到缺失值前的 k 倍数个数),由于题目中 nums[i] 最大为 100,因此 m 最多不超过 100/k + 1(是一个常数),这一步的时间复杂度可视为 O(1)(常数时间)。O(n)(因为常数时间可忽略,核心复杂度由数组遍历决定)。has 上,哈希表存储的键数量等于数组 nums 中不同元素的个数(本题中数组无重复元素,数量为 n = 5)。O(n)(n 为数组长度)。O(1) 时间,因此能高效找到缺失的最小倍数。O(n)(n 为数组长度),额外空间复杂度为 O(n)(哈希表存储数组元素)。.
package main
import (
"fmt"
)
func missingMultiple(nums []int, k int)int {
has := map[int]bool{}
for _, x := range nums {
has[x] = true
}
for x := k; ; x += k {
if !has[x] {
return x
}
}
}
func main() {
nums := []int{8, 2, 3, 4, 6}
k := 2
result := missingMultiple(nums, k)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
from typing import List
def missingMultiple(nums: List[int], k: int) -> int:
has = set()
for x in nums:
has.add(x)
x = k
while True:
if x not in has:
return x
x += k
def main():
nums = [8, 2, 3, 4, 6]
k = 2
result = missingMultiple(nums, k)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int missingMultiple(vector<int>& nums, int k) {
unordered_set<int> has;
for (int x : nums) {
has.insert(x);
}
for (int x = k; ; x += k) {
if (has.find(x) == has.end()) {
return x;
}
}
}
int main() {
vector<int> nums = {8, 2, 3, 4, 6};
int k = 2;
int result = missingMultiple(nums, k);
cout << result << endl;
return0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·