码迷,mamicode.com
首页 > 其他好文 > 详细

[每日一题2020.06.27] leetcode #41 set 内部交换

时间:2020-06-27 19:48:19      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:wap   master   cgo   映射关系   turn   开始   ++   直接   技术   

技术图片

方法一 利用set 空间\(O(n)\) 时间 \(O(n)\)

利用一个set存储映射关系, 然后直接从1 - size遍历找出第一个不在set中的元素就可以

int firstMissingPositive(vector<int>& nums) {
    set<int> s;
    for (int i = 0; i < nums.size(); ++i)
    {
        s.insert(nums[i]);
    }
    for (int i = 1; i <= nums.size() + 1; ++i)
    {
        if(!s.count(i)) return i;
    }
    return 1;
}

方法二 交换 空间\(O(1)\) 时间 \(O(n)\)

直接在数组本身上操作, 空间只有交换时的临时tmp

通过交换使满足nums[i] = i + 1的元素归位

然后从头开始寻找第一个不满足的元素就是所求 , 如果全部满足, 就输出size+1

int firstMissingPositive(vector<int>& nums) {
    for (int i = 0; i < nums.size(); ++i) {
        while (nums[i] >= 1 && nums[i] <= nums.size() && nums[i] != nums[nums[i] - 1]) {
            swap(nums[i], nums[nums[i] - 1]);
        }
    }
    for (int i = 0; i < nums.size(); ++i) {
        if (nums[i] != i + 1) return (i + 1);
    }
    return nums.size() + 1;
}

[每日一题2020.06.27] leetcode #41 set 内部交换

标签:wap   master   cgo   映射关系   turn   开始   ++   直接   技术   

原文地址:https://www.cnblogs.com/roccoshi/p/13199438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!