码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode() First Missing Positive

时间:2015-11-19 20:47:13      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

  非常内疚,没想到这样的思路。

思路:把数组上某一个位置的值放到正确的地方上去(nums[i-1] == i),nums[i] >0 && <n && nums[i] != nums[nums[i]-1]

class Solution {
public:
    int firstMissingPositive(vector<int>& A) {
        int i = 0;
        int n=A.size();
    for (; i < n; ){

        if (A[i] <= 0 || A[i] == i+1 || A[i] > n || A[i] == A[A[i]-1]) i++; // 无效交换或位置正确

        else swap(A[i], A[A[i]-1]); // 交换到正确的位置上

    }



    for (i = 0; i < n; i++) if (A[i] != i+1) break; // 寻找第一个丢失的正数

    return i+1;
        
    }
};

题目中一旦要求 O(1) ,不要求开辟多余的空间,那么直觉上应该就是直接操作数组本身,如果这个数还有一个特点,就是应该在 1~n 内,应该要想到 swap().

LeetCode() First Missing Positive

标签:

原文地址:http://www.cnblogs.com/yanqi110/p/4978842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!