標籤:
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.
解題思路一:
剛看到題目的時候感覺無從下手,後來仔細理解題意,需要找到first missing positive integer,只需要找到第一個即可,因此我們可以開一個布爾數組,儲存i是否存在,JAVA實現如下:
public int firstMissingPositive(int[] nums) {boolean[] num=new boolean[nums.length + 1]; for (int i = 0; i < nums.length; i++) if (nums[i] > 0&&nums[i] <= nums.length) num[nums[i]-1] = true; for (int i = 0; i < num.length; i++) if (!num[i]) return i+1; return 0; }
解題思路二:使用bool數組會有O(N)的空間複雜度,直接採用交換的方法可以避免,JAVA實現如下:
static public int firstMissingPositive(int[] nums) { if(nums.length==0) return 1; for (int i = 0; i < nums.length; ) { if (nums[i] >= 0 &&nums[i] < nums.length &&nums[i] != i && nums[i] != nums[nums[i]]){ int temp=nums[i]; nums[i]=nums[nums[i]]; nums[temp]=temp; } else i++; } for (int i = 1; i < nums.length; ++i) if (nums[i] != i) return i; return nums[0] == nums.length ? nums.length + 1 : nums.length; }
Java for LeetCode 041 First Missing Positive