給定一個未排序的整數數組,找出其中沒有出現的最小的正整數。
示例 1:
輸入: [1,2,0]
輸出: 3
示例 2:
輸入: [3,4,-1,1]
輸出: 2
示例 3:
輸入: [7,8,9,11,12]
輸出: 1
主要判斷數組中如果全是負數就返回1; 如果數組中有正數,找出最小的正數,如果大於1則返回1,如果=1的話判斷數組中它之後的正數和它是否連續,不連續則找出第一個不連續的數返回它上一個數+1,如果都是連續的則返回最後一個數加1。
代碼如下:
//缺失的第一個正數
public static int FirstMissingPositive(int[] nums)
{
if (nums.Length == 0) return 1;
Array.Sort(nums);
if (nums[nums.Length - 1] < 1) return 1; //數組中全爲負數
int number = -1; //標記要返回的數
int index = -1; //標記第一個爲正數的下標
for (int i = 0; i < nums.Length - 1; i++) {
if (nums[i] >= 1 && index == -1)
{
index = i;
}
if (nums[i] >= 0 && nums[i + 1] - nums[i] > 1) {
number = nums[i] + 1;
break;
}
}
//如果number = -1 則說明數組中的正數是連續的
if (number == -1) number = nums[nums.Length - 1] + 1;
//index = -1 則說明數組長度 = 1 或者只有最後一位是正數
if (index == -1)
{
if (nums[nums.Length - 1] > 1) //所以如果那位正數大於1則缺少1否則就是2
{
number = 1;
}
else {
number = 2;
}
}else { //數組中有多位正數
if (nums[index] > 1) //第一位正數如果比1大就返回1;
{
number = 1;
}
}
return number;
}