题解 | #数组中未出现的最小正整数#

数组中未出现的最小正整数

http://www.nowcoder.com/practice/8cc4f31432724b1f88201f7b721aa391

原地哈希

(1)答案肯定在[1, n + 1]之间;
(2)通过原地哈希,将[1, n]的元素对应回数组的[0, n - 1]位置上;
时间复杂度:
空间复杂度:

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; i ++){
            //在整个外部for循环下,while的swap交换总次数最多为n次,所以时间复杂度为外部for循环的时间复杂度
            while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){ //没有在合适的位置
                swap(nums[i], nums[nums[i] - 1]);
            }
        }
        for(int i = 0; i < n; i ++){
            if(nums[i] != i + 1) return i + 1;
        }
        return n + 1;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
08-20 19:41
那一天的Java_J...:简历完全流水账,学生思维很严重,还有很大的优化空间,可以多看看牛客的简历。
点赞 评论 收藏
分享
09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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