Appearance
041缺失的第一个正数
code
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var firstMissingPositive = function(nums) {
nums = nums.map(
(item) => {
if(item <= 0 || item > nums.length){
return Infinity;
} else {
return item;
}
}
);
for(let i = 0; i < nums.length; i++){
if(Math.abs(nums[i]) === Infinity){
continue;
}
if(nums[Math.abs(nums[i]) - 1] > 0){
nums[Math.abs(nums[i]) - 1] = nums[Math.abs(nums[i]) - 1] * -1;
}
}
for(let j = 0; j < nums.length; j++){
if(nums[j] > 0){
return j + 1;
}
}
return nums.length + 1;
};总结
- 很神奇很神奇,主要是为啥会记混
- 我感觉多数情况下尤其前端,尤其实习层面的面试不需要你做分析,你只需要呆头呆脑的记,但理论上这个pattern,可以提炼一下,比如看到要求就知道原地排序,然后最大最小这种事有顺序啥的
- 洗负号这个我觉得很神奇,我原来记得是换位,但是换位我记得是看第一个infinity
- 现有的记录状态不太对,很多表格里都写的近过需看,但实际上简单我觉得意义不大,有些像爬楼梯啥的,基本上都是重复造车,反正想想办法吧,可能考完微分方程