视觉计数重复,并将唯一条目放入数组 [C++] 中的新数组中
visual counting duplicates and put the unique entries in to new array in array [c++]
q.编写一个程序,其中包含一个名为"remove_duplicates"的函数,该函数以随机顺序获取整数数组,然后消除数组中的所有重复整数。该函数应采用三个参数:
- 一个整数数组,它是(在 main 中读取和填充)
- 数组的大小。
-
通过引用传递的变量,要在 main 中打印,以显示数组中有多少个值 没有重复。该函数不应返回值,但如果消除了任何重复的整数,则该函数应计算该值,因此新值会告知数组中不同整数的数量。假设传递给函数的数组如下所示,传递给函数的数组大小为 10。
0 1 2 3 4 5 6 7 8 958 |26 |91 |26 |70 |70 |91 |58 |58 |66
该函数应将数组更改为如下所示:
0 1 2 3 4 5 6 7 8 9
58 | 26 | 91 | 70 | 66 | ?? | ?? | ?? | ?? | ??
它应该更改非重复计数器的值,使其为 5。第 5 个单元格后面的单元格中的问号表示当函数返回时,这些单元格中的数字无关紧要。
我的函数有问题
void remove_duplicates ( int h[] ,int n ,int &count ){
count = 0;
int a[100];
for (int i = 0 ; i < n ; i++ )
for(int j = i ; j<n ; j++){
if(h[i]!=h[j])
a[i]=h[i];
else
count++;
-
将整个数组复制到 std::set 中。 该集将消除重复项,这意味着重复项的插入将失败。
-
将集合复制回阵列。
-
唯一值的数量是集合的大小。
这些问题有很多解决方案,我将向您展示一个没有临时数组的解决方案。如果您的要求允许您使用排序算法,请在应用此代码之前对数组进行排序:
unsigned int numberOfDuplicates = 0;
for( unsigned int i = 1; i<numberOfElements; i++ )
{
if( array[i-1] == array[i] ){
numberOfDuplicates++;
for( unsigned int j = i; j< numberOfElements-1; j++ )
{
array[j] = array[j+1];
}
}
}
每次发现新的重复项时,您都可以通过将数组的其余部分向左移动一个位置来吃掉它。第二种解决方案是分配一个新数组并仅传递其中不存在的值,然后只需将分配的数组复制回来。
如果不进行排序,算法可能是:
unsigned int numberOfDuplicates = 0;
for( unsigned int i = 1; i<numberOfElements; i++ )
{
for( unsigned int k = i; k < numberOfElements; k++){
if( array[i-1] == array[k] ){
numberOfDuplicates++;
for( unsigned int j = k; j< numberOfElements-1; j++ )
{
array[j] = array[j+1];
}
}
}
}
函数完成后,您的计数将大于应有的计数,因为每个元素都会多次递增计数。你应该尝试这样的事情:
void remove_duplicates ( int h[] ,int n ,int &count ){
count = n;
int a[100],ok,p;
for (int i = 0 ; i < count-1 ; i++ ) {
ok=1;
for(int j = i+1 ; j<count ; j++)
if(h[i]==h[j]) {
ok=0;
p=j;
}
if(!ok) {
for(int j = p+1; j<count; j++)
h[j-1]=h[j];
count--;
}
}
count=n-count;
}
"ok" 检查 v[i] 是否可以在数组中的其他地方找到,p 是它出现的位置,因此它知道要消除哪个元素。我假设您需要在数组中保留元素的首次出现,否则您可以更轻松地消除它。希望对您有所帮助。
如果您有定义的范围或可能的无效值(例如 -1),则可以将重复项设置为此无效值,并在遍历数组时找到重复项后,将元素移回起点。
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '