2012-10-11 77 views
0

給定的值的有序列表,我想組具有相同的值,輸出每個值的計數的任何成員:如何對計數算法進行優化?

例如,

input: [1,1,1,3,3,2,1,1] 
output: 
[(1,3),(3,2),(2,1),(1,2)] 

input:['a','a','b','b','c','a'] 
output: 
[('a',2),(b,2),(c,1),(a,1)] 

此外,欲治療的第一和最後值專門。什麼是最佳的方式來做到這一點?

+0

你的算法是怎樣的? – Gumbo

+0

我將當前元素與前一個(如果相同)counter ++進行比較。直到它們不同,保存計數器,並將其重置爲零,以用於下一個元素。 –

+1

處理邊界條件是O(1),因此不值得優化... – CAFxX

回答

0

我寫下了這個問題的解決粗糙:

main() 
{ 
    char arr[100]; 
    int count[100],j=0,i,n; 
    for(i=0;i<100;i++) 
    { 
     count[i] = 0; 
    } 
    scanf("%d\n",&n); 
    scanf("\n%c",&arr[0]); 
    count[j]=1; 
    for(i=1;i<n;i++) 
    { 
     scanf("%c",&arr[i]); 
     if(arr[i-1]==arr[i]) 
     { 
      count[j]++; 
     } 
     else 
     { 
      j++; 
      count[j]=1; 
     } 
    } 
    for(i=0;i<=j;i++) 
    { 
     printf("%d\n",count[i]); 
    } 
} 

我在這裏從用戶讀取n個字符,然後讀取當前字符後檢查它與前一個當前字符。我爲count保留一個單獨的數組。

希望可以幫到...