1. 程式人生 > 其它 >【Codeforces Round #665 (Div. 2) D】Maximum Distributed Tree

【Codeforces Round #665 (Div. 2) D】Maximum Distributed Tree

技術標籤:線性表資料結構

P21 13題(408-2018統考真題)

第一種解法(正確答案):

int findMissMin(int A[],int n){
int  i,*B;
//動態分配空間
B=int *malloc(sizeof(int)*n);
memset(B,0,sizeof(int)*n);//對陣列進行賦值,並將其全部賦值為0
for(i=0;i<n;i++){
if(A[i]>0 && A[i]<n)
//將陣列A中的正整數,存到陣列B中,並將陣列A的值作為陣列B的下標,由於下標是從0開始的,所以陣列A的值需要減一
//用這種方式將陣列A中的元素進行排序,例如陣列:-5,-3,2,4
//B[1]=1;B[3]=1;於是可以看出B中缺B[0]等,於是從i最小開始B[i]=i+1; B[A[i]-1]=1; } for(int i=0;i<n;i++) if(B[i]==0) break; //如果陣列B中的元素全都大於0,即為1,即陣列A中的元素全部為正整數,還是看少哪個i,然後輸出i+1 return i+1; }

時間複雜度O(n);空間複雜度O(n)(因為開闢出了一個B陣列,大小為n)

第二種解法(未執行過)

SearchMin(int A[].int x){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(
A[j]>A[j+1]){ int temp; temp=A[j]; A[j]=A[j+1]; A[j+1]=temp; } } } for(int i=0;i<n;i++){ int m=1; if(A[i]>0) if(A[i]==m) m++; else printf(未出現的最小正整數為m); if(i>=n) printf(未出現的最小正整數為m)

演算法思想:先對陣列進行排序,然後找出未出現的最小正整數。
時間複雜度O(n^2),空間複雜度(1);