1. 题目
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,and [3,4,-1,1] return 2.Your algorithm should run in O(n) time and uses constant space.
2. 思路
遍历找到所有的正数,并建立hashmap。
同时记录下遍历过程中找到的第一个未验证的最小不存在正数起点。然后从这个点开始每次递增1的在hashmap中验证是否存在。最多只会验证“正数的个数”次。即复杂度O(N)3. 代码
耗时:6ms
class Solution {public: // 1. 第一遍找到正数的最小值的某一个局部最优起始位, 同时建立hashmap // 2. 从最小值开始递增1的查找是否存在,最多只会查找“整数的个数个” int firstMissingPositive(vector & nums) { unordered_set set; int start = 1; //int count = 0; for (int i = 0; i < nums.size(); i++) { int iv = nums[i]; if (iv <= 0) continue; //++count; set.insert(iv); if (iv == start) { start++; } } while (true) { if (set.find(start) != set.end()) { ++start; continue;; } else { break; } } return start; }};