41. 缺失的第一个正数

题目:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

示例 1:

输入: [1,2,0]
输出: 3

示例 2:

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

示例 3:

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

 

思路:

//把小于nums.length的值放到与下标对应,结束后 ,有以下几种情况:

//1.从下标1开始位移,遇到第一个不同的下标与值不同的元素,即为要求元素;

//2.走到底,说明正数1-nums.lemgth-1都存在,此时判断nums[0]是否为nums.lemgth,是则答案为nums.lemgth+1,不是则为nums.lemgth

 

代码: 

class Solution {
    public int firstMissingPositive(int[] nums) {
       //特殊情况特殊处理
        if(nums.length==0||nums==null){return 1;}       
        if(nums.length==1){
            if(nums[0]<=0){return 1;}
            if(nums[0]==1){return 2;}
            else{return 1;}
        }
 
        for(int i=0;i<nums.length;){
            if(nums[i]<nums.length&&nums[i]>=0){ 
                if( nums[i]!=i&&nums[i]!=nums[nums[i]] ){swap(nums,i,nums[i]);  continue; }//把下标和值相匹配  同时考虑元素存在重复情况,当下标与值不匹配,但值所在的下标与这个下标内的值匹配不用交换位置  
            }
            i++;
        } 
          
        for(int i=1;i<nums.length;i++){
           if(nums[i]!=i){ return i;} //循环一次,下标与值不同的第一个元素就是缺失的数字
        }
        if(nums[0]==nums.length){return nums.length+1;}  //循环退出,考虑下标0内元素
        return nums.length;
    } 


    public static void swap(int[] nums,int i,int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
}
posted @   堤苏白  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示