Leetcode41. First Missing Positive

来源:互联网 发布:python ftp上传文件 编辑:程序博客网 时间:2024/05/22 15:44

题目

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.

思路

利用hash的思想来做
PS:在本地测试的时候,将中间结果打印出来

测试用例

[][0][1][-1][-1, 2, 3, 5, 1 , 6]

代码

public class Solution {    public int firstMissingPositive(int[] nums) {        for(int i = 0; i < nums.length; i++){            while(nums[i] > 0 && nums[i] < nums.length && nums[ nums[i] - 1] != nums[i])                swap(nums, i, nums[i] - 1);        }        for(int i = 0 ; i < nums.length; i++){            if(nums[i] != i + 1)                return i + 1;        }        return nums.length + 1;    }    void swap(int[] nums, int left, int right){        int temp = nums[left];        nums[left] = nums[right];        nums[right] = temp;    }}

结果

这里写图片描述

他山之玉

class Solution{public:    int firstMissingPositive(int A[], int n)    {        for(int i = 0; i < n; ++ i)            while(A[i] > 0 && A[i] <= n && A[A[i] - 1] != A[i])                swap(A[i], A[A[i] - 1]);        for(int i = 0; i < n; ++ i)            if(A[i] != i + 1)                return i + 1;        return n + 1;    }};
public class Solution {    public int firstMissingPositive(int[] nums) {        // nums[i] -> i+1        int next;        for (int i = 0 ; i < nums.length; i++) {            int curr = nums[i];            if (curr > 0 && curr != i+1 && curr <= nums.length) {                do {                    next = nums[curr-1];                    nums[curr-1] = curr;                    curr = next;                } while (curr > 0 && curr <= nums.length && nums[curr-1] != curr);            }        }        int j;        for (j = 0; j < nums.length; j++) {            if (nums[j] != j+1)                break;        }        return j+1;    }}
def firstMissingPositive(self, A):    num = 0    for i in A:        if i > 0:            num = num | (1 << i)    x = 1    while True:        if (1 << x) & num == 0:            return x        x += 1