如何防止检查数组中的重复元素?

问题描述 投票:0回答:1

我正在检查数组中每个元素的频率,问题是重复元素对自身的计数超出了需要,我想跳过已计数元素的计数过程。

for(int x=0;x<n;x++){
        bird = all[x];
        for(int y=0;y<n;y++){
            if(all[x] == all[y]){
                status[bird-1]++; 
            }
        }
    }

输入示例 - 1 1 2 2 3 我想要输出 - 2 2 1 0 0 但我得到输出 - 4 4 1 0 0

status[] 保存元素的频率。 status[] 只有 5 个索引,all[] 的输入范围只有 1 到 5。

这里,x=1 处的 1 再次计算其自身的频率,但我不希望这样。有没有一种逻辑可以跳过重复元素而不增加代码复杂度?

P.S - 我正在用 C 语言编码。

arrays c duplicates frequency
1个回答
0
投票

在您的输入中,重复的元素是相邻的。假设情况总是如此,您可以使用以下方法:

for ( size_t j = n; j--; )
   status[ j ] = 0;

if ( n > 0 ) {
   size_t j = 0;
   int prev = all[ 0 ];
   for ( size_t i = 0; i < n; ++i ) {
      if ( all[ i ] != prev ) {
         prev = all[ i ];
         ++j;
      }

      ++status[ j ];
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.