給定乙個正整數陣列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
process(intarr,int i,int sum;hashset set)
process(arr,i+1,sum,set);//不包含當前數arr[i]
process(arr,i+1,sum+arr[i],set);//包含當前數
}
分析
思路分析
**
public
intdymicp(intarr)
}for(int i=min;i!=dp.length;i++)
return sum+1;
}
複雜度
分析將arr排序,必然有arr[0]=1;
從左往右計算每個位置i上的range(0<=i<=n).range代表計算到arr[i]時,[1,range]區間內得所有正數都可以被arr[0…i-1]的某個子集相加表示,初始時arr[0],range=0;
如果arr[i]>range+1,因為arr是有序的,所以arr[i]往後的數都不是出現range+1,直接返回;如果arr[i]<=range+1,說明[1,range+arr[i]]區間內的所有整數都可以被arr[0,…i-1]的某個子集表示,這是因為區間[1,range],可以由[0..i-1]子集和表示,對於k>range,的數,k-arr[i]
實現
public
intfin(int arr)
return range+1;
}
正數陣列的最小不可組成和
題目 給定乙個正數陣列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 ...
正數陣列的最小不可組成和 高階問題
正數陣列的最小不可組成和 高階問題 給定乙個正數陣列arr,其中所有的值都為整數,以下是最小不可組成和的概念 請寫函式返回正數陣列arr的最小不可組成和 保證1一定出現過!要求 時間複雜度為o n logn o nlogn o nlog n 額外空間複雜度為o 1 o 1 o 1 輸入描述 第一行乙...