41 缺失的第乙個正數

2022-03-20 01:53:12 字數 954 閱讀 1399

leetcode第41題,缺失的第乙個正數

對於這道題,利用的是桶排序的思想,桶排序也就是利用陣列的下標和值對應的關係,也就是說下標為0的索引對應的值應該就是0,依次類推n對應n

但是這只是一種對應關係,也就是說我們不僅僅只侷限於這種關係,只要有合理的對應關係即可,那麼這題要求從1開始第乙個沒有的正整數。所以我們將下標0對應1

n-1對應n。

考慮正整數最小為1,也就是不能缺少1否則答案直接就是1,而且陣列長度為n,那麼也就是說一共才有n個數,又要求從1開始,所以結果應該在[1,n+1]這個區間之間

我們是想一下極端情況,也就是說陣列就是連續的且從1開始,那麼我們從最小開始遍歷得到的結果就是最後的n+1,

所以進一步考慮在排序的時候每乙個空間不能浪費,也就是0是最小的,那麼就對應1。

遍歷陣列,如果這個數小於等於0直接跳過,如果大於n也跳過。

如果這個數大於0也小於等於n,但是這個數不在它應該在的位置,也就是比如說,在索引3有乙個1,那麼這個1應該在0這個索引的位置,所以我們需要將0索引的值和這個3索引的值交換一下,同時我們交換來的這個值,我們還沒有判斷這個值的情況,也就是說不能直接跳過它去下乙個位置,此時我們需要i--,(這個地方的處理就是在快排的時候對應大於v的時候交換位置時候的處理)

在交換完成之後,也就是陣列遍歷完成,我們再次遍歷陣列尋找那個缺失的正整數,如果發現下標為i的地方的值不為i+1,那麼結果就是i+1是缺失的了,直接返回這個值即可,如果遍歷到尾還沒有找到,說明這個陣列排好序以後是乙個有序的連續的陣列,那麼我們在這個迴圈的外面直接返回乙個n+1即可。

下面是**:

1

class

solution 11}

12for(int i=0;i)

1317

return n+1;18}

19public

void swap(int arr,int l,int

r)24 }

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,2,0 輸出 3 示例 2 輸入 3,4,1,1 輸出 2 示例 3 輸入 7,8,9,11,12 輸出 1 說明 你的演算法的時間複雜度應為o n 並且只能使用常數級別的空間。這是從王道的考研資料結構看來的。設定乙個與給...

41 缺失的第乙個正數

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