如何优化计数算法?

时间:2012-10-11 05:30:09

标签: algorithm optimization

给定一个有序的值列表,我想对具有相同值的任何成员进行分组并输出每个值的计数:

例如,

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)]

另外,我想特别处理第一个和最后一个值。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分: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个字符,然后在读取当前字符后用前一个字符检查当前字符。我为计数保留了一个单独的数组。

希望有帮助...