LeetCode 之 JavaScript 解答第41题 —— 缺失的第一个正数(First Missing Positive)

Time:2019/4/6
Title: First Missing Positive
Difficulty: Difficulty
Author: 小鹿

问题:First Missing Positive

Given an unsorted integer array, find the smallest missing positive integer.

Note:

Your algorithm should run in O(n) time and uses constant extra space.

Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

Solve:

▉ 算法思绪:

桶排序头脑。

遍历第一遍数据,将数据寄存到与下标雷同的位置,遍历第二遍数据,推断每一个下标对应的数据是不是为下标值。假如不是,该数值就是当前确切的最小正整数;当数组遍历完另有没找到,那末数组的长度 + 1 就是缺失的最小正整数值。

▉ 算法步骤:

1、把数组的每一个下标当作是一个桶,每一个桶只能寄存一个数据(每一个下标对应一个数据),我们划定桶中的数据和下标的对应关联是 0 下标对应数据1,1下标对应数据2,2下标对应数据3……,问题请求我们在O(n)的时候复杂度内找出一组数据中缺失的最小正整数。

2、遍历第一遍数组中的数据,根据步骤 1 的划定,先推断两个当前下标对应的数据是不是为划定的数据,假如不是,我们将该数据寄存到划定的下标对应的数组中。然后交流的数据继续进行推断,直到该数据放到划定下标的数组中为止(小于即是 0 和 数据大于数组长度的除外)。

3、再遍历数组,从下标 0 最先推断该下标是不是寄存划定的数据,假如不是则该下标就是这组数据中缺失的最小正整数。

4、假如数组中的数据都婚配对应的下标,那末最小正整数就是数组长度加一。

▉ 代码完成:
/**
* @param {number[]} nums
* @return {number}
* 边界条件:
* 1) 推断传入的数组是不是为空。 
* 2) 推断数组中的数据只要 1 个。
* 3) 交流数据时,推断雷同数据的处置惩罚。
*/
var firstMissingPositive = function(nums) {
    //遍历数组
    for(let i = 0;i < nums.length;i++){
        //假如当前的数据不对应准确的下标 + 1 && 数据大于 0 && 长度小于即是数组
        while(nums[i] != i+1 && nums[i] > 0 && nums[i] <= nums.length){
            //推断该数据对应准确位置的数据是不是雷同
            if(nums[nums[i]-1] == nums[i]) {
                //假如雷同,将该下标对应的元素置为 0
                nums[i] = 0;
                break;
            }
            //假如不反复,就交流数据
            let temp = nums[nums[i] - 1];
            nums[nums[i] - 1] = nums[i];
            nums[i] = temp;
        }
    }
    //遍历一切数据,找出缺失的最小正整数
    let index = 0;
    for(; index < nums.length; index++){
        if(nums[index] !== index+1){
            break;
        }
    }
    return index+1;
};

//测试
let arr =[];
console.log(firstMissingPositive(arr))
▉ 总结:

1、桶排序的头脑。

2、桶排序还能够完成在一组数据中查找反复的数据。

迎接一同加入到 LeetCode 开源 Github 堆栈,能够向 me 提交您其他言语的代码。在堆栈上对峙和小伙伴们一同打卡,配合完美我们的开源小堆栈!
Github:https://github.com/luxiangqia…

迎接关注我个人民众号:「一个不甘寻常的码农」,记录了本身一起自学编程的故事。

    原文作者:小鹿
    原文地址: https://segmentfault.com/a/1190000018780009
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞