Skip to content

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;
};

总结

  1. 很神奇很神奇,主要是为啥会记混
  2. 我感觉多数情况下尤其前端,尤其实习层面的面试不需要你做分析,你只需要呆头呆脑的记,但理论上这个pattern,可以提炼一下,比如看到要求就知道原地排序,然后最大最小这种事有顺序啥的
  3. 洗负号这个我觉得很神奇,我原来记得是换位,但是换位我记得是看第一个infinity
  4. 现有的记录状态不太对,很多表格里都写的近过需看,但实际上简单我觉得意义不大,有些像爬楼梯啥的,基本上都是重复造车,反正想想办法吧,可能考完微分方程