1. 程式人生 > >9.14 正數陣列的最小不可組成和

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

題目】:

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

    1、把arr每個子集內的所有元素加起來會出現很多值,其中最小的記為min,最大的記為max

    2、在區間[min, max]上,如果有數不可以被arr某一個子集相加得到,那麼其中最小的那個數是arr的最小不可組成和

    3、在區間[min, max]上,如果所有的數都可以被arr的某一個子集相加得到,那麼max+1是arr的最小不可組成和

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

  舉例:

    arr=[3, 2, 5],子集{2}相加產生2為min,子集{3, 2, 5}相加產生10為max,在區間[2, 10]上,4、6和9不能被任何子集相加得到,其中4是arr的最小不可組成和

    arr=[1, 2, 4],子集{1}相加產生1為min,子集{1, 2, 4}相加產生7為max,在區間[1, 7]上,任何數都可以被子集相加得到,所以8是arr的最小不可組成和

 

進階題目】:

  如果已知正數陣列arr中肯定有1這個數,是否能更快地得到最小不可組成和

 


題目來源:左程雲老師《程式設計師程式碼面試指南》