zoukankan      html  css  js  c++  java
  • leetcode: First Missing Positive

    http://oj.leetcode.com/problems/first-missing-positive/

    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放在第1个,2放在第2个,最后扫描数组,如果第n个位置上的值不是n,那么n就是我们要找的数了。以例子中的[3, 4, -1, 1]举例:

    1. 第1个元素是3,必须把它放到第3个位置上,因为-1是负数,直接交换,现在数组变为[-1, 4, 3, 1]。
    2. 第2个元素是4,必须把它放到第4个位置上,因为1是正数,交换后数组变为[-1, 1, 3, 4],因为第2个位置上的值变为1,需要继续处理。
    3. 第2个元素是1,必须把它放到第1个位置上,因为-1是负数,直接交换,现在数组变为[1, -1, 3, 4]。
    4. 第3个元素现在是3,不用处理,继续。
    5. 第4个元素现在是4,不用处理,继续。
    6. 现在遍历数组,发现第2个位置上的值不是2,那么2就是我们要找的数。
     1 class Solution {
     2 public:
     3     int firstMissingPositive(int A[], int n) {
     4         if (0 == n) {
     5             return 1;
     6         }
     7         
     8         for (int i = 0; i < n; ++i) {
     9             if ((i + 1) == A[i]) {
    10                 continue;
    11             }
    12             else if (A[i] > 0) {
    13                 int number = A[i];
    14                 
    15                 while ((number <= n) && A[number - 1] != number) {
    16                     int tmp = A[number - 1];
    17                     
    18                     A[number - 1] = number;
    19                     
    20                     if (tmp <= 0) {
    21                         break;
    22                     }
    23                     else {
    24                         number = tmp;
    25                     }
    26                 }
    27             }
    28         }
    29         
    30         for (int i = 0; i < n; ++i) {
    31             if (A[i] != (i + 1)) {
    32                 return i + 1;
    33             }
    34         }
    35         
    36         return n + 1;
    37     }
    38 };
  • 相关阅读:
    通用指令-数据库通用操作
    通用指令-key通用操作
    数据类型-sorted_set类型基本操作和扩展操作
    数据类型-set类型基本操作和扩展操作
    数据类型-list类型基本操作和扩展操作
    数据类型-hash类型基本操作和扩展操作
    ORACLE 函数 NVL, NVL2, NULLIF
    maven 配置jdk版本
    maven仓库添加自己的jar包
    Map 中的EntrySet()
  • 原文地址:https://www.cnblogs.com/panda_lin/p/first_missing_positive.html
Copyright © 2011-2022 走看看