题解 | #缺失的第一个正整数#
缺失的第一个正整数
http://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5
- 方法一:哈希表
/**
* @param nums int整型一维数组
* @return int整型
*/
function minNumberDisappeared( nums ) {
let map = new Map() , max = -Infinity
for(let i of nums){
if( i > 0){
map.set(i , 1)
}
// max的作用是记录接下来进行遍历寻找map中有无含有[1,max]的数值
max = Math.max(max , i)
}
// 当max小于0 ,返回 1
if(max <= 0) return 1
// 此处的max+1是为了解决:当map中都含有1~max的数值时,返回max+1
for(let j = 1 ; j <= max + 1 ; j++){
if(!map.has(j)) return j
}
return 1
}
module.exports = {
minNumberDisappeared : minNumberDisappeared
};
2.方法二:对方法一进行改良,排序后标记nums中大于0的位置即可 ,如此可替代哈希表
/**
* @param nums int整型一维数组
* @return int整型
*/
function minNumberDisappeared( nums ) {
let map = new Map() , max = -Infinity
for(let i of nums){
if( i > 0){
map.set(i , 1)
}
// max的作用是记录接下来进行遍历寻找map中有无含有[1,max]的数值
max = Math.max(max , i)
}
// 当max小于0 ,返回 1
if(max <= 0) return 1
// 此处的max+1是为了解决:当map中都含有1~max的数值时,返回max+1
for(let j = 1 ; j <= max + 1 ; j++){
if(!map.has(j)) return j
}
return 1
}
module.exports = {
minNumberDisappeared : minNumberDisappeared
};