正數陣列的最小不可組成和 高階問題

2021-10-11 22:56:49 字數 1376 閱讀 4216

正數陣列的最小不可組成和-高階問題

給定乙個正數陣列arr,其中所有的值都為整數,以下是最小不可組成和的概念

請寫函式返回正數陣列arr的最小不可組成和

保證1一定出現過!

[要求]

時間複雜度為o(n

logn

)o(nlogn)

o(nlog

n),額外空間複雜度為o(1

)o(1)

o(1)

輸入描述:

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

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

輸出描述:

輸出乙個整數表示陣列的最小不可組成和

示例1輸入

3

1 2 5

輸出
4
說明
3 = 1 + 2
示例2

輸入

5

1 2 3 4 5

輸出
16
備註:

1 ⩽n

⩽105

1 \leqslant n \leqslant 10^5

1⩽n⩽1051⩽

arri

⩽109

1 \leqslant arr_i \leqslant 10^9

1⩽arri

​⩽10

9題解:

相比於上一題 正數陣列的最小不可組成和 ,這題多了乙個條件:1一定出現。於是此題可以進行優化:

簡要證明:

假設當前遍歷到位置 i,若要湊出區間 [1, arr[i] + range],我們現在需要湊出來的是區間 [range+1, range+arr[i]],假設 arr[0…i-1] 可以湊出 range - x ,則:

若 arr[i] > range + 1,則 x = arr[i] - 1 > range ,arr[0…i-1] 肯定無法湊出來(最大值為 range) ,而後面不會出現 range + 1 ,所以 range + 1 就是答案。

**:

#include

#include

using

namespace std;

const

int n =

100000

;int n;

int a[n]

;int

main

(void

)return0*

printf

("%ld\n"

, range +1)

;}

正數陣列的最小不可組成和

給定乙個正整數陣列arr,其中所有的值都為整數,以下是最小不接組成和的概念 arr 1,2,3,4 返回11 arr 2,3,4 返回7 public intbaoli intarr for int i min 1 i integer.max value i return0 public void ...

正數陣列的最小不可組成和

題目 給定乙個正數陣列arr,其中所有的值都是整數,以下是最小不可組成和的概念 把arr每個子集內的所有元素加起來會出現很多值,其中最小的記為min,最大的記為max。在區間 min,max 上,如果有數不可以被arr某乙個子集相加得到,那麼其中最小的那個數就是arr的最小不可組成和。在區間 min...

正數陣列的最小不可組成和

正數陣列的最小不可組成和 給定乙個正數陣列arr,其中所有的值都為整數,以下是最小不可組成和的概念 請寫函式返回正數陣列arr的最小不可組成和 時間複雜度為o n i 1nar ri o n times sum n arr i o n i 1n arri 額外空間複雜度為o i 1n arri o ...