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;
        }
    };
  • 相关阅读:
    一个C++程序员学习C#语言
    C#入门教程笔记
    完全卸载mysql 停止服务、卸载相关程序、删除注册表
    C++结构简介
    babun,windows shell
    无限极设计以及随意移动节点(树结构)
    springboot 配置访问外部静态资源详解
    mysql8+keepalived 双主高可用搭建
    mysql 双主复制搭建
    mysql 主备搭建
  • 原文地址:https://www.cnblogs.com/dplearning/p/4466192.html
Copyright © 2011-2022 走看看