1115:直方圖
時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 21217 通過數: 13727
【題目描述】
給定一個非負整數陣列,統計里面每一個數的出現次數。我們只統計到陣列里最大的數。
假設 Fmax(Fmax<10000)是陣列里最大的數,那么我們只統計{0,1,2.....Fmax}里每個數出現的次數。
【輸入】
第一行n是陣列的大小。1≤n≤10000。
緊接著一行是陣列的n個元素。
【輸出】
按順序輸出每個數的出現次數,一行一個數。如果沒有出現過,則輸出0。
對于例子中的陣列,最大的數是3,因此我們只統計{0,1,2,3}的出現頻數。
【輸入樣例】
5
1 1 2 3 1
【輸出樣例】
0
3
1
1
我的代碼:
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],max1=0,b,num;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
if(a[i]>max1)
{
max1=a[i];
b=i;
}
}
for(int j=0;j<=max1;j++)
{
num=0;
for(int i=1;i<=n;i++)
{
if(a[i]==j) num++;
}
cout<<num<<endl;
}
return 0;
}
運行結果:
【1115】程式運行結果
用戶名:?15997682622,題目編號:1115,運行編號:9148291,代碼長度:369Bytes
通過
測驗點 結果 記憶體 時間
測驗點1 答案正確 456KB 6MS
測驗點2 答案正確 448KB 10MS
測驗點3 答案正確 448KB 8MS
測驗點4 答案正確 472KB 80MS
測驗點5 答案正確 464KB 237MS
測驗點6 答案正確 460KB 341MS
測驗點7 答案正確 480KB 698MS
測驗點8 答案正確 500KB 558MS
測驗點9 答案正確 504KB 749MS
測驗點10 答案正確 508KB 759MS
------------------------------------------------------------------------
洛谷上超時,一本通通過,請大佬看看能不能進一步優化,謝謝啦
uj5u.com熱心網友回復:
我的想法,a[] 陣列先清零(看可使用函式優先使用 memset()否則就得回圈了)然后用來存放各數的計數,輸入資料時判斷非負后 a[x]++ ;輸入完后再一個回圈結果的輸出。最多 3個單回圈吧,你這個代碼卻有了兩重回圈了,一旦資料量大了,耗時會劇增。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/232167.html
標籤:數據結構與算法
上一篇:因果圖轉化為判定表的方法
