Leetcode 41. 缺失的第一個正數
阿新 • • 發佈:2018-12-10
給定一個未排序的整數陣列,找出其中沒有出現的最小的正整數。
示例 1:
輸入: [1,2,0] 輸出: 3
示例 2:
輸入: [3,4,-1,1] 輸出: 2
示例 3:
輸入: [7,8,9,11,12] 輸出: 1
說明:
你的演算法的時間複雜度應為O(n),並且只能使用常數級別的空間。
一開始建了一個flag陣列做的,發現好像並不能這麼做。。。
後來上網上搜了題解。。。才碰巧弄明白。。。
思路就是,判斷某個數是否在正確的位置,舉個例子,就是1必須在陣列中的第一個位置。如果不是,且正確的位置沒有對應正確的元素,兩個位置的值進行交換。。。負數和大於陣列元素的值除外。。。
然後挨個遍歷是否對應正確的位置就行了。。。
還要注意輸出Size+1的情況
程式碼如下:
class Solution { public: int firstMissingPositive(vector<int>& nums) { int Size=nums.size(); if(Size==0) return 1; for (int i=0;i<Size;) { if(nums[i]>0&&nums[i]<=Size&&nums[i]!=nums[nums[i]-1]) { int loc=nums[i]; nums[i]=nums[loc-1]; nums[loc-1]=loc; } else { i++; } } for (int i=0;i<Size;i++) if(nums[i]!=i+1) return i+1; return Size+1; } };