题解 | #缺失的第一个正整数#

缺失的第一个正整数

https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5

2022.0808算法第19题缺失的第一个正整数
哈希表也能解决这个问题,思路也很简单。
缺失的第一个正整数肯定是1-n+1之间的数,n为数组内元素的个数
因此只需要将数组内的元素存入哈希表,然后判断1-n+1之间的最小的不在hash中的数。
不采用hash存储时,也可以通过数组本身存储元素的特征,数组本身具有下标和值两个属性。
首先将非正数赋值为n+1,
for(int i=0;i<nums.size();i++){
    if(nums[i]<=0)
        nums[i]=nums.size()+1;
}
然后此时数组里的值变成1-n+1之间,
将数组元素的值,对应的下标的值赋值为负
for(int i=0;i<nums.size();i++){
    if(abs(nums[i])<=nums.size()){
        nums[abs(nums[i])-1]=abs(nums[abs(nums[i])-1])*-1;
    }              
}
这样第一个正数对应的下标就是数组缺失的第一个正整数
for(int i=0;i<nums.size();i++)
    if(nums[i]>0)
        return i+1;




#算法题#
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务