41. 缺失的第一個正數

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

示例 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;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章