提问人:NORAGAMI 提问时间:10/30/2023 最后编辑:Vlad from MoscowNORAGAMI 更新时间:10/31/2023 访问量:70
如何防止检查数组中的重复元素?
How do I prevent checking of duplicate elements in a array?
问:
我正在检查数组中每个元素的频率。问题是重复元素的计数超出了需要,我想跳过已经计数的元素的计数过程。
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[]
保持元素的频率。 只有 5 个索引,并且输入范围仅在 1 到 5 之间。status[]
all[]
在这里,1 at 再次计算自己的频率,但我不希望这样。x = 1
是否有在不增加代码复杂性的情况下跳过重复元素的逻辑?
答:
1赞
ikegami
10/30/2023
#1
你只需要
for ( size_t i = 5; i--; )
status[ i ] = 0;
for ( size_t i = n; i--; )
++status[ all[ i ] - 1 ];
评论
0赞
NORAGAMI
10/31/2023
谢谢,这很有帮助!
2赞
nielsen
10/30/2023
#2
代码假定值范围为 。在这种情况下,您可以简单地为每个值增加相应的计数器:1
n
// Reset all counters. This can be skipped if "status" is initialized to all zeroes {0}
// The code below assumes "status" is an array. Otherwise, the count must
// be the length (in case of the OP, this is 5).
for(int x=0; x < sizeof(status)/sizeof(status[0]); x++) {
status[x] = 0;
}
// Count each occurrence. If elements of "all" may be out of range, a range check
// must be added.
for(int x=0; x<n; x++) {
status[all[x]-1]++;
}
1赞
Vlad from Moscow
10/30/2023
#3
例如,仅使用一个 for 循环就足够了
for ( int x = 0; x < n; x++ ) {
bird = all[x];
status[bird-1]++;
}
评论
0赞
NORAGAMI
10/31/2023
谢谢,这很有帮助!
0赞
Vlad from Moscow
10/31/2023
@NORAGAMI完全没有。不客气:)
评论
main
1 2 2 3 1
2 2 1 0 0
1
2
3
4
5
1 3 10 10 3