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

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

示例 1:

輸入: [1,2,0]
輸出: 3
示例 2:

輸入: [3,4,-1,1]
輸出: 2
示例 3:

輸入: [7,8,9,11,12]
輸出: 1
說明:

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

這是一道簡單題
解法如下

思路很簡單,先排序數組,先保證循環不越界,當 i == nums.length 就說明數組正整數部分是完全有序的,跳出並返回值。 如果數字爲負數就跳過,當數字爲正且從1開始連續 (此處連續用雙指針甄別 ),當nums[i]爲1也就是最小的正數時j開始與其同步自增,如果數組的正整數部分是連續的[…1,2,3,4,5]的話 nums[i] == nums[i-1] 就會一直成立,那麼就是掃描一遍直到nums.length,返回結果。如果不成立那就説明找到了結果,返回結果。

class Solution {
    public int firstMissingPositive(int[] nums) {
        Arrays.sort(nums);
        int i = 0,j = 1;
        while(true){
            if(i == nums.length){
                return j;
            }
            if(nums[i]<=0){
                i++;
                continue;
            }
            if(i>0 && nums[i] == nums[i-1]){
                i++;
                continue;
            }  
            if(nums[i] == j){
                i++;
                j++;
                continue;
            }
            return j;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章