我正在检查数组中每个元素的频率,问题是重复元素对自身的计数超出了需要,我想跳过已计数元素的计数过程。
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 语言编码。
在您的输入中,重复的元素是相邻的。假设情况总是如此,您可以使用以下方法:
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 ];
}
}