zoukankan      html  css  js  c++  java
  • 【leetcode】First Missing Positive(hard) ☆

    Given an unsorted integer array, find the first missing positive integer.

    For example,
    Given [1,2,0] return 3,
    and [3,4,-1,1] return 2.

    Your algorithm should run in O(n) time and uses constant space.

    思路:

    又是一个不让排序,但是要得到跟排序有关信息的。想了半天,只能空间换时间,可是又只能用常量空间,这可难到我了。完全想不出来。放弃看答案。

    发现,答案中其实是用了空间换时间的思想的,但是这里的空间直接就用了最开始的数组。

    具体的思路是:从第一个数字开始,把正数换到按顺序排序的位置上。即1放到位置0,2放到位置1。直到当前位置的数字变成正确的数字。如果遇到小于0的数字或者大于元素个数的数字跳过,因为如果后面有对应位置的数字的话是会换过来的。

    代码:

    class Solution {
    public:
        int firstMissingPositive(vector<int>& nums) {
            for(int i = 0; i < nums.size(); ++i)
            {
                while(nums[i] > 0 && nums[i] <= nums.size() && nums[nums[i] - 1] != nums[i]) //其实这里不要nums[i] > 0 也可以 就是会慢一点
                    swap(nums[i], nums[nums[i] - 1]);  //交换数字 直到当前位置数字正确 或者 数字无法按序放在当前矩阵中
            }
    
            int i;
            for(i = 0; i < nums.size(); ++i)
            {
                if(nums[i] != i + 1)
                    break;
            }
            return i + 1;
        }
    };
  • 相关阅读:
    半夜删你代码队 Day6冲刺
    半夜删你代码队 Day5冲刺
    半夜删你代码队 Day4冲刺
    半夜删你代码队 Day3冲刺
    Scrum 冲刺博客集合
    团队项目6——复审与事后分析
    Alpha阶段项目复审
    事后Postmortem会议
    团队作业5-测试与发布
    Scrum 冲刺第七天
  • 原文地址:https://www.cnblogs.com/dplearning/p/4466192.html
Copyright © 2011-2022 走看看