'LeetCode算法第41題:缺失的第一個正數'

算法 Java 小天使淘淘 2019-07-19
"

問題描述:

給定一個未排序的整數數組,找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]

輸出: 3

示例 2:

輸入: [3,4,-1,1]

輸出: 2

示例 3:

輸入: [7,8,9,11,12]

輸出: 1

說明:

你的算法的時間複雜度應為O(n),並且只能使用常數級別的空間。

思路:

可以使用桶排序的方式,將一個正數放到它對應的(值 - 1)的下標上,然後可以對數組進行遍歷,當元素的值和它對應的下標不匹配時,即為缺失的第一個正數。

java代碼:

public int firstMissingPositive(int[] nums) {
if(null == nums || nums.length == 0){
return 1;
}

for(int i = 0; i< nums.length ; i ++){
while(nums[i] > 0 && nums[i] <= nums.length && nums[i] != i + 1){
int temp = nums[i];
nums[i] = nums[temp - 1];
nums[temp - 1] = temp;

if(nums[i] == temp){
break;
}
}
}

for(int i = 0; i < nums.length ; i ++){
if(nums[i] != i + 1){
return i + 1;
}
}

return nums[nums.length - 1] + 1;
}
"

相關推薦

推薦中...