【LeetCode】41. First Missing Positive

来源:互联网 发布:java经典实例 第三版 编辑:程序博客网 时间:2024/05/18 03:15

  • Difficulty: 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.

分析

本质上是桶排序(bucket sort),每当A[i]!=i+1的时候,将A[i]与A[A[i]-1]交换,直达无法交换为止,终止条件A[i]== A[A[i]-1]。

时间复杂度O(n)

class Solution {public:int firstMissingPositive(vector<int>& nums) {bucket_sort(nums);for (int i = 0; i < nums.size(); ++i)if (nums[i] != (i + 1))return i + 1;return nums.size() + 1;}private:static void bucket_sort(vector<int>& A) {const int n = A.size();for (int i = 0; i < n; i++) {while (A[i] != i + 1) {if (A[i] <= 0 || A[i] > n || A[i] == A[A[i] - 1])break;swap(A[i], A[A[i] - 1]);}}}};


0 0
原创粉丝点击