描述
给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数
进阶: 空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
数据范围:
-2^{31}\le nums[i] \le 2^{31}-1−2
31
≤nums[i]≤2
31
−1
0\le len(nums)\le5*10^50≤len(nums)≤5∗10
5
分析:
这里一开始理解了好久,没看懂啥意思。 就是在数组找没有出现的正整数。所以我们只需要统计整数就可以了。然后判定没有的最小正整数。自然数里最小正整数为1。
一, 收集正整数。这里使用了Map
const myMap = new Map();
nums.forEach((item) => {
if (item > 0) {
myMap.set(item, true);
}
});
二,从1开始判断Map中是否有该数,每次加一。通过map的has检查,如果没有循环中止。那么该值就是最小正整数。
let res = 1 // 默认最小正整数为 1
while(myMap.has(res)){
res++
}
完整代码
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
function minNumberDisappeared( nums ) {
// write code here
const myMap = new Map();
nums.forEach((item) => {
if (item > 0) {
myMap.set(item, true);
}
});
let res = 1 // 默认最小正整数为 1
while(myMap.has(res)){
res++
}
// 如果nums的值都是在 1 - len 范围内,则最小值是 len+1 ,
// 如果1-len内有空缺的值,则最小正整数是这第一个空缺的值
//如果 nums 都是负数或者最小值大于 len 这返回的最小整数是1,
return res
}
module.exports = {
minNumberDisappeared : minNumberDisappeared
};