41. First Missing Positive
2017-01-01 09:59
169 查看
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.
一刷没ac
解题思路:要求O(n),因此不能按照排序的思想来做。第一步遍历数组将负数都置为n+1,第二部遍历数组将在1-n范围内的数对应的数组下表的数置为负数,再遍历数组找到第一个不为负数的索引即可。
在discuss看到的别人的方法。
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.
一刷没ac
解题思路:要求O(n),因此不能按照排序的思想来做。第一步遍历数组将负数都置为n+1,第二部遍历数组将在1-n范围内的数对应的数组下表的数置为负数,再遍历数组找到第一个不为负数的索引即可。
public class Solution { public int firstMissingPositive(int[] nums) { if(nums == null || nums.length == 0) return 1; for(int i = 0; i < nums.length; i++){ if(nums[i] <= 0) nums[i] = nums.length+1; } for(int i = 0; i < nums.length; i++){ if(Math.abs(nums[i])-1 < nums.length){ int idx = Math.abs(nums[i])-1; if(nums[idx] > 0) nums[idx] = -1*nums[idx]; } } int res = nums.length+1; for(int i = 0; i < nums.length; i++){ if(nums[i] > 0){ res = i+1; return res; } } return res; } }
在discuss看到的别人的方法。
public class Solution { public int firstMissingPositive(int[] nums) { if(nums == null || nums.length == 0) return 1; int i = 0; while(i < nums.length){ if(nums[i] == i+1 || nums[i] > nums.length || nums[i] <= 0) i++; else if(nums[i] != nums[nums[i]-1]) swap(nums, i, nums[i]-1); else i++; } i = 0; while(i < nums.length && nums[i] == i+1) i++; return i+1; } public void swap(int[] nums, int i, int j){ int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
相关文章推荐
- leetCode (41)--First Missing Positive
- 41. First Missing Positive
- [leedcode 41] First Missing Positive
- Java [Leetcode 41]First Missing Positive
- LeetCode 41 - First Missing Positive
- 41. First Missing Positive
- Leet Code 41 First Missing Positive - Java
- 【LeetCode 41】 First Missing Positive
- LeetCode 41 First Missing Positive(找到数组中第一个丢失的正数)
- (LeetCode 41)First Missing Positive
- [leetcode-41]First Missing Positive(java)
- leetcode 41:First Missing Positive
- LeetCode 41 First Missing Positive
- LeetCode41 - First Missing Positive
- Leetcode 41 - First Missing Positive
- 41. First Missing Positive
- leetcode question 41:First Missing Positive
- LeetCode 41 First Missing Positive
- Leetcode 41 First Missing Positive 正解不是盛传的桶排序
- LeetCode 41 First Missing Positive