LeetCode_41_数组_缺失的第一个正数

Posted 軒邈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode_41_数组_缺失的第一个正数相关的知识,希望对你有一定的参考价值。

原创

/*
    理解:
        1.未排序的数组nums;
        2.nums数组元素是整数,包括正整数和负整数;
        3.找出没有出现的最小的正整数。
        4时间复杂度:O(n),空间复杂度:常量级

    思路:
        1.忽略负整数和大于numsSize的的元素;
        2.给在大小在[1, numsSize]区间的元素建立哈希表,元素数值给1;
        3.遍历判断,只要在[1, numsSize]区间未出现的元素,最小的那个值就是缺失的;
        4.如果在[1, numsSize]区间的元素都出现了,那么缺失最小的值就是numsSize+1的值。

*/
int firstMissingPositive(int* nums, int numsSize)

    int *pArry = malloc((numsSize + 1) * sizeof(int)); /* 建立哈希表 */

    if(pArry == NULL) /* 需要作判断下 */
    
        return 0;
    

    memset(pArry, 0, (numsSize + 1) * sizeof(int)); /* 先让元素初始化为0 */

    for (int i = 0; i < numsSize; i++) 
    
        if (nums[i] <= 0)  /* 满足负正整数条件下直接跳到 for 循环中的判断 */
        
            continue;   
         

        if (nums[i] > numsSize) /* 大于numsSize时,也直接跳到 for 循环中的判断 */
        
            continue;
        

        pArry[nums[i]] = 1;  /* 在区间内,给元素赋值为1 */
    

    for (int i = 1; i <= numsSize; i++) 
    
        if (!pArry[i]) /* 当[1, numsSize] 最小下标对应的元素为0的话那么就是缺失的最小正整数 */
        
            return i;
        
    

    return numsSize + 1; /* 遍历完后没有在区间内找到,那么就是numsSize + 1为最小的 */


总结:

心静真的很不一样,静下来了,思维都变得清晰了!

以上是关于LeetCode_41_数组_缺失的第一个正数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode_41_数组_缺失的第一个正数

每日LeetCode力扣(41~45)

leetcode 41 缺失的第一个正数

LeetCode:缺失的第一个正数41

[LeetCode 41.] 缺失的第一个正数

LeetCode 41. 缺失的第一个正数 | Python