zoukankan      html  css  js  c++  java
  • 41. First Missing Positive

     

    原题

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

    例如:给序列[1,2,0], 第三个位置上不是正数,那缺失的正数就是 3,

       给序列 [3,4,-1,1],先把正数放在对应的位置上之后。变成了[1,-1,3,4],第二个位置上不是2,而是-1,所以缺失的正数是2,即返回 2.

    解决方法:

      把所有正数都放在自己正确的对应的位置上,然后再找出第一个对应元素不是正数的下标,那么这一下标就是First Missing Positive。

    过程详细图示例

    代码:

    int firstMissingPositive(vector<int>& nums) {
            int i = 0;
            int n = nums.size();
            while (i < n)    //把每个数放在正确下表的位置。比如数3在第一个位置,就把它与第三个位置的元素置换,那么3就能放在第三个位置了,
            { 
                if (nums[i] != (i+1) && nums[i] >= 1 && nums[i] <= n && nums[nums[i]-1] != nums[i]) 
                    swap(nums[i], nums[nums[i]-1]);
                else
                    i++;
            }
            for (i = 0; i < n; ++i)  //找出第一个不是正数的元素的下标(即下标不等于它的元素值)
                if (nums[i] != (i+1))
                    return i+1;
            return n+1;
        }
  • 相关阅读:
    Spring static 静态属性注入
    大众点评Cat--架构分析
    rxjava
    TCP/IP协议三次握手与四次握手流程解析
    [SDOI2014]数数
    CF-GYM101741K. Consistent Occurrences
    [JSOI2012]玄武密码
    [POI2000]病毒
    [JSOI2007]文本生成器
    [HNOI2006]最短母串问题
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7861732.html
Copyright © 2011-2022 走看看