leetcode系列41-缺失的第一个正数

【题目概要】

41. 缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数
示例 1:
输入: [1,2,0]
输出: 3
示例 2:

输入: [3,4,-1,1]
输出: 2
示例 3:

输入: [7,8,9,11,12]
输出: 1

【代码示例】

// 第一步将所有不在【1,numsSize】中的数值进行numsSize+1的转化为新的数组
// 存在范围内的就是将其转化为负数
// 判断新数组第一个大于0的位置,如果全是负数,则就是numsSize+1

int firstMissingPositive(int* nums, int numsSize){
    
    for(int i=0; i<numsSize; i++)
    {
        if(*(nums+i) <= 0  || *(nums+i) > numsSize)
        *(nums+i) = numsSize + 1;
        else
        {
            nums[*(nums+i) - 1] *= -1;
        }
    }
    for(int i=0; i<numsSize; i++)
    {
        if(*(nums+i) > 0)
        {
            return i+1;
        }
    }
    return numsSize+1;
}

版权声明:本文为qq_30286973原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。