1. 程式人生 > >LeetCode(41)-First Missing Positive

LeetCode(41)-First Missing Positive

41-First Missing Positive

Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0]
Output: 3
Example 2:
Input: [3,4,-1,1]
Output: 2
Example 3:
Input: [7,8,9,11,12]
Output: 1

嗯,這個題的意思就是給一個數組,然後找出數組裡面缺失的最小的正數,思路比較簡單,
但是,細節有點多

  • 思路如下
  • 1、排序
  • 2、陣列為空或者陣列最大值小於零,直接返回1
  • 3、定位到第一個大於0的數字的位置
  • 4、如果這個位置的數字大於1,直接返回1
  • 5、進入迴圈部分,這部分是考慮的第一大於0的數字為1的情況
    • 從第一個不為零的位置開始,然後定義一個值j與之相等,位置向下移動,那j++
    • 比較j與num[k]若j小就返回j;
    • 若陣列中有重複的就跳過
public int firstMissingPositive(int[] nums) {
      Arrays.sort(nums);
      if(0==nums.length||nums[
nums.length-1]<=0)return 1; int i=0; while (nums[i]<=0){ i++; } if(nums[i]>1)return 1; for (int k=i,j=nums[i]; k<nums.length; k++) { if (nums[k]>j)return j; if(k-1>=0&&nums[k]==nums[k-1])continue; j++; }
return nums[nums.length-1]+1; }