撰寫函式,統計給定的分數陣列中,比每個分數高的人數,該人數陣列通過一個新的一維陣列(需要動態申請)回傳,因該陣列與原分數陣列等長,故不需要回傳新陣列的長度。你能夠將時間復雜度控制在O(N)以內否? 說明:你可以認為分數是零到100。
輸入樣例1:
第一行是人數。第二行用是空格分隔的若干分數。
6
80 70 60 90 79 80
輸出樣例1:
計算并回傳比對應位置分更高的人數,各結應人數以新的陣列回傳。輸出由測驗程式完成。
{1,4,5,0,3,1}
說明:比80分高的1個:90,比70分高的有4個:80,90,79,80…… 是不是隱式說明了它的分數排序位置……。
輸入樣例2:
5
80 80 80 90 88
輸出樣例2:
計算并回傳比對應位置分更高的人數,是一個新的陣列初地址(需要動態申請空間),輸出由測驗程式完成。
{2,2,2,0,1}
函式介面定義:
int* fun(int *d,int N);
/* 請在這里填寫答案 */
uj5u.com熱心網友回復:
這是我敲的代碼,但是時間復雜度不行,有一個測驗點運行超時,怎么改進??怎么用一個回圈完成??
int* fun(int *d,int N){
int i,j;
int *a=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++){
for(j=0;j<N;j++)
if(d[j]>d[i])
a[i]++;
}
return a;
}uj5u.com熱心網友回復:
int m = 6;
int arr[]{80, 70, 60, 90, 79,80 };
int result[101];
memset(result, 0, sizeof(int) * 101);
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < arr[i]; j++)
result[j]++;
}
for (int m = 0; m < 6; m++)
printf(" %d", result[arr[m]]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269803.html
標籤:C語言
上一篇:C++小白,在線求解
下一篇:模板類的約束模板友元函式問題
