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

Posted       

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[每日一题2020.06.27] leetcode #41 set 内部交换相关的知识,希望对你有一定的参考价值。

技术图片

方法一 利用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 内部交换的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 每日一题 953. 验证外星语词典

Leetcode每日一题(3)

LeetCode每日一题

LeetCode2022 7月 每日一题

LeetCode2022 7月 每日一题

LeetCode9月 每日一题