https://oj.leetcode.com/problems/first-missing-positive/
给一列数,找出缺失的第一个正数。要求时间复杂度 O(n)
第一步遍历一遍,找出最大的数和最小的数。
第二步建立一个vector,以 max+1 为size。
第三部遍历一遍,存储每个存在的数到相应的下标那里。
第四部遍历一遍,寻找数组中第一个计数是0的数。
class Solution { public: int firstMissingPositive(int A[], int n) { int min = 2; int max = 0; //find the smallest and the biggest for(int i = 0;i<n;i++) { max = A[i]>max?A[i]:max; min = min>A[i]?A[i]:min; } if(max == 0) return 1; if(min == 2) return 1; vector<int> map; map.resize(max+1); for(int i = 0;i<n;i++) { if(A[i]>0) map[A[i]] = 1; } for(int i =1;i<max;i++) if(map[i]==0) return i; return max+1; } };