Given an unsorted integer array, find the first missing positive integer.spa
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.code
Your algorithm should run in O(n) time and uses constant space.hash
遍歷找到全部的正數,並創建hashmap。
同時記錄下遍歷過程當中找到的第一個未驗證的最小不存在正數起點。
而後從這個點開始每次遞增1的在hashmap中驗證是否存在。最多隻會驗證「正數的個數」次。
即複雜度O(N)it
耗時:6msio
class Solution { public: // 1. 第一遍找到正數的最小值的某一個局部最優起始位, 同時創建hashmap // 2. 從最小值開始遞增1的查找是否存在,最多隻會查找「整數的個數個」 int firstMissingPositive(vector<int>& nums) { unordered_set<int> 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; } };