陣列中未出現的最小正整數

2021-10-10 15:58:09 字數 1534 閱讀 5550

陣列中未出現的最小正整數

給定乙個無序陣列arr,找到陣列中未出現的最小正整數

例如arr = [-1, 2, 3, 4]。返回1

​ arr = [1, 2, 3, 4]。返回5

[要求]

時間複雜度為o(n

)o(n)

o(n)

,空間複雜度為o(1

)o(1)

o(1)

輸入描述:

第一行為乙個整數n。表示陣列長度。

接下來一行n個整數表示陣列內的數

輸出描述:

輸出乙個整數表示答案

示例1輸入

4

-1 2 3 4

輸出
1
示例2

輸入

4

1 2 3 4

輸出
5
備註:

1 ⩽n

⩽106

1 \leqslant n \leqslant 10^6

1⩽n⩽106−1

09⩽a

rri⩽

10

9-10^9 \leqslant arr_i \leqslant 10^9

−109⩽a

rri​

⩽109

法一:

法一**:

#include

#include

using

namespace std;

const

int n =

1000001

;int n;

int a[n]

;int

main

(void

)int l =

0, r = n;

while

( l < r )

else

swap

( a[l]

, a[a[l]-1

]);}

return0*

printf

("%d\n"

, l +1)

;}

法二:

建立乙個大小為 n 的雜湊表,把 1 <= arr[i] <= n 的元素標記,然後從 1~n 遍歷,若 hash[i] == 0 ,說明 i 是陣列中未出現的最小正整數,直接輸出即可。

法二**:

#include

using

namespace std;

const

int n =

1000001

;int n;

bool a[n]

;int

main

(void

)for

(int i =

1; i <= n;

++i )

return0*

printf

("%d\n"

, n +1)

;}

陣列中未出現的最小正整數

給定乙個無序陣列arr,找到陣列中未出現的最小正整數 例如arr 1,2,3,4 返回1 arr 1,2,3,4 返回5 要求 時間複雜度為o n 空間複雜度為o 1 示例1 1,2,3,4 1 方法二 先原地排序,將1 n之間的數字通過交換的方式進行排序 例如 2,3,1,4 第乙個元素nums ...

求陣列中未出現的最小正整數

題目 給定乙個無序整型陣列arr,找到陣列中未出現的最小正整數。要求時間複雜度為o n 空間複雜度為o 1 例如 arr 1,2,3,4 返回1。arr 1,2,3,4 返回5。解法 一 窮舉查詢 最小正整數是1,所以常規的方法就是在陣列中找1,然後是2,依次找下去 一直找到第乙個沒有出現的正整數,...

演算法習題 陣列中未出現的最小正整數

題目 給定乙個無序整型陣列arr,找到陣列中未出現的最小正整數。要求時間複雜度為o n 空間複雜度為o 1 例如 arr 1,2,3,4 返回1。arr 1,2,3,4 返回5。分析 這道題要理解最小正整數的意思,最小的正整數就是1,所以考察的方法就是在陣列中找1,然後找2,依次找下去.直到第乙個沒...