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

缺失的第一个正整数

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;




#算法题#
全部评论

相关推荐

如题,他是要劝退我了吗
椛鸣:根据你的时间 来给你安排任务 如果你时间长 可能会参与到一些长期的项目 时间短 那就只能做点零工
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务