leetcode41. First Missing Positive

来源:互联网 发布:校园网络借贷 编辑:程序博客网 时间:2024/06/06 07:42

41. 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.

解法一

将数组中的元素放入到set里面,然后从1到nums的长度判断是否在set中,如果不在,则缺当前值。

public class Solution {    public int firstMissingPositive(int[] nums) {        if (nums.length == 0 || nums == null) {            return 1;        }        Set<Integer> set = new HashSet<Integer>();        for (int num : nums) {            set.add(num);        }        for (int i = 0; i < nums.length; i++) {            if (!set.contains(i + 1)) {                return i + 1;            }        }        return nums.length + 1;    }}

解法二

O(1)的空间复杂度,将每个元素交换到应在的位置,最后看哪一位不符合要求。

public class Solution {    public int firstMissingPositive(int[] nums) {        if (nums.length == 0 || nums == null) {            return 1;        }        for (int i = 0; i < nums.length; i++) {            while (nums[i] != i + 1 && nums[i] > 0 && nums[i] - 1 >= 0 && nums[i] - 1 < nums.length                    && nums[i] != nums[nums[i] - 1]) {                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;    }    private void swap(int[] nums, int a, int b) {        int temp = nums[a];        nums[a] = nums[b];        nums[b] = temp;    }}
原创粉丝点击