41. First Missing Positive
题目描述:Given an unsorted integer array, find the first missing positive integer.
For example,
Given[1,2,0]
return3
,
and[3,4,-1,1]
return2
. Your algorithm should run in O(n) time and uses constant space.
题目大意:给定一个未排序的数组,找到第一个丢失的正整数。
思路:将每正数放到他正确的位置,第0个位置放置元素1,第一个位置放置元素2,依此类推,放置完毕之后,判断每个位置的元素,是否满足当前位置的元素为当前位置索引+1,如果不是,则返回当前位置应该返回的元素,即索引+1,如果遍历完毕,都符合适当位置放相应元素,则丢失的是最后一个元素,返回n+1。
代码
package Array; /** * @Author OovEver * @Date 2017/11/30 20:52 */ public class LeetCode41 { public int firstMissingPositive(int[] nums) { for(int i=0;i<nums.length;i++) { // 判断当前位置的元素是否为应当放的元素,如位置0放1位置放2 while (nums[i] > 0 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) { // 如果不是,交换两个位置的元素 int temp = nums[nums[i] - 1]; nums[nums[i] - 1] = nums[i]; nums[i] = temp; } } for(int i=0;i<nums.length;i++) { // 正数不连续 if (nums[i] != i + 1) { return i + 1; } } return nums.length + 1; } }