leetcode41——缺失第一个正数

这篇博客深入探讨了一种寻找数组中最小正整数缺失值的方法。通过排序、遍历和交换操作,确保数组元素在其下标对应的正整数位置,从而找到缺失的最小正整数。算法详尽分析了每一步的目的和逻辑,适合对算法感兴趣的读者学习。

题目:

错误解答:

 

这样只能 通过123个

正确解答:

class Solution {
    public int firstMissingPositive(int[] nums) {
        Arrays.sort(nums);
        int tem=0;
        for(int i=0;i<nums.length;i++){
            tem=nums[i]-1;//记录nums[i]所在位置  因为是最小正整数 所以是在其大小后面-1

            if(0<=tem&&tem<nums.length&&nums[i]!=nums[tem]-1){//nums[i]!=nums[tem]-1  tem=nums[tem]-1
                //得出位置 local后 判断local所在值是否等于nums[i]
                swap(nums,tem,i);
            }
        }
        for(int j=0;j<nums.length;j++){
            if(nums[j]!=j+1){
                return j+1;
            }
        }
        return nums.length+1;
    }

    public void swap(int[] nums,int a,int b){
        int t=nums[a];
        nums[a]=nums[b];
        nums[b]=t;
    }
}

最小正整数 1 2 3 4 5 6....

按照数组下标来说 0位置保存1  1位置保存2  

所以数组里的数  合法的最小正整数 应在1和nums.length之间 取最小 就看其他数符不符合

01:记录nums[i]所在位置  因为是最小正整数 所以是在其大小后面-1

02:得出位置 local后 判断local所在值是否等于nums[i]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值