41 缺失的第乙個正數

2021-09-19 22:51:15 字數 887 閱讀 3168

給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]

輸出: 3

示例 2:

輸入: [3,4,-1,1]

輸出: 2

示例 3:

輸入: [7,8,9,11,12]

輸出: 1

說明:你的演算法的時間複雜度應為o(n),並且只能使用常數級別的空間。

//這是從王道的考研資料結構看來的。

設定乙個與給定陣列nums大小相同的記錄陣列b,其中,b[i]為1表示i+1這個整數存在於nums中,例如b[0]=1表示1在nums中,b[5]=1表示6在nums中。因此構建好b以後,遍歷b中第乙個為0的位置+1就是缺失的最小正整數。b的構建:若nums[i]大於0並且小於n(n為nums大小),則b[nums[i]-1]=1。

分析可知:

若nums恰為,則b=,此時通過下標i遍歷b至結束,則i最後的值是nums.size()(i++),而最小正整數恰為nums.size()+1,即i++;只要nums中有非正數或者有大於nums.size()的數,則b中一定有等於0的位置,若b[i]=0,說明i+1不在nums中,因此通過b中第乙個為0的元素,就可以找到最小正整數。

class

solution

int i;

for(i =

0; i < nums.

size()

;++i)

return i;}}

;

時間複雜度:o(n),滿足要求;空間複雜度:建立了乙個記錄陣列b,所以是o(n),不滿足要求。

41 缺失的第乙個正數

給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。示例 1 輸入 1,2,0 輸出 3示例 2 輸入 3,4,1,1 輸出 2示例 3 輸入 7,8,9,11,12 輸出 1說明 你的演算法的時間複雜度應為o n 並且只能使用常數級別的空間。思路 這個題目和442.陣列中重複的資料 448....

41 缺失的第乙個正數

先遍歷一遍,將大於等於1和小於等於陣列長度的數字放在與下標同值的位置 交換 再遍歷一遍,檢查數值是否和下標同值,不同值則返回該下標,如果都同值,則返回陣列長度 1 注意每次交換後要檢查心焦緩過來的數字是夠需要再交換,所以用while迴圈,而不用for迴圈 class solution object ...

41 缺失的第乙個正數

題目.high 如果不要求使用o1的額外空間,這個演算法就非常簡單了,開闢乙個同樣長度的陣列y,遍歷當前陣列,出現乙個合法的數,滿足x 1 x len nums 就將 y x 1 x,然後遍歷y找到第乙個y i i 1的數。難點就在於如何不使用額外的陣列y,就地實現這乙個演算法。package ma...