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
Note:
Your algorithm should run in O(n) time and uses constant extra space.
解题思路:
第一步:将数组中大于0的整数做一个hash映射,同时获取最大值ARRMAX。
第二步:从1到ARRMAX遍历hash表,找到第一个为0的终止,返回最后查找索引值即可。
1 #define HASHNUM 100000 2 3 int firstMissingPositive(int* nums, int numsSize) 4 { 5 int numsMax = 0; 6 int hash[HASHNUM] = {0}; 7 // hash and seek for array max num. 8 for(int idx = 0; idx < numsSize; ++idx) 9 { 10 if(nums[idx] <= 0 ) continue; 11 else 12 { 13 hash[nums[idx]] = 1; 14 if(numsMax < nums[idx]) 15 { 16 numsMax = nums[idx]; 17 } 18 } 19 } 20 21 // judge for missing 22 int retIdx = 1; 23 for(retIdx = 1; retIdx <= numsMax; ++retIdx) 24 { 25 if(hash[retIdx] == 0) 26 { 27 break; 28 } 29 } 30 31 return retIdx; 32 }