陣列中未出現的最小正整數
給定乙個無序陣列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,依次找下去.直到第乙個沒...