41. 缺失的第一个正数

一 题目:

二 思路:

首先负数不关心,其次我们需要的是缺失的最小正数,因此,我们只要按照1开始排序,看哪个是空的就行了,空的那个就是我们要的。

三 代码:

 public int firstMissingPositive(int[] nums) {
        //常数额外空间,没有出现的最小正数
        //如果都是负数或者0,最小正整数就是1,如果有正数就找到已经出现的从1开始连续的最大的正数
        int max = Integer.MIN_VALUE;
        //放置从0开始的数,我们仅需要放从0开始的数,放不进去就拉倒,因为想要有结果必然有空隙
        int[] temp = new int[nums.length+1];
        for (int num : nums) {
            if (num>=0 && num<temp.length){
                temp[num]=num;
                max = Math.max(max, num);
            }
        }
        //如果全是负数就直接返回1
        if (max <=0) {
            return 1;
        }

        //找到第一个不是0位置但是等于0的空
        for (int i = 0; i < temp.length; i++) {
            if (i!=0&&temp[i]==0){
                return i;
            }
        }
        return max+1;
    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容