C++ 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
如果有人问我这个问题,我很抱歉,但我遇到了一个编码问题,本来应该很简单,但我一直在努力。请提供一个链接,如果已经回答(我可能只是不善于搜索) 问题:给定示例代码,请填写函数以仅返回数组中的唯一值。价值观必须保持秩序 输入示例:1、2、3、10、4、3、2、10、1、11、6 输出示例:123104116 下面是我的解决方案,但我似乎想不出一个不包括使用向量存储唯一值的简单解决方案。测试人员不喜欢使用向量,因此我只能假设附加的头/库是不可接受的。还有其他解决办法吗?我猜测试人员正在寻找要在适当位置过滤的阵列C++ 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?,c++,sorting,C++,Sorting,如果有人问我这个问题,我很抱歉,但我遇到了一个编码问题,本来应该很简单,但我一直在努力。请提供一个链接,如果已经回答(我可能只是不善于搜索) 问题:给定示例代码,请填写函数以仅返回数组中的唯一值。价值观必须保持秩序 输入示例:1、2、3、10、4、3、2、10、1、11、6 输出示例:123104116 下面是我的解决方案,但我似乎想不出一个不包括使用向量存储唯一值的简单解决方案。测试人员不喜欢使用向量,因此我只能假设附加的头/库是不可接受的。还有其他解决办法吗?我猜测试人员正在寻找要在适当位置
#include <iostream>
#include <vector> //I was not allowed to add this...
//Function to fill in...
int fxn(int *a, int size)
{
std::vector<int> temp;
for(int i(0); i < size; ++i)
{
bool found(false);
for(auto j : temp)
{
if( j == a[i])
{
found = true;
break;
}
}
if(!found)
{
temp.push_back(a[i]);
}
}
int *ptr_a = &a[0];
for(auto j : temp)
{
*ptr_a = j;
++ptr_a;
}
return size - temp.size();
}
//The rest untochable...
void print(int *a, int size)
{
for(int i(0); i < size; ++i)
{
std::cout << a[i] << " ";
}
std::cout << std::endl;
}
int main(void)
{
int a[] = { 1, 2, 3, 10, 4, 3, 2, 10, 1, 11, 6 };
int size = 11;
int count = fxn(a, size);
print(a, size - count);
return 0;
}
#包括
#include//不允许我添加此。。。
//要填写的函数。。。
int fxn(int*a,int size)
{
std::向量温度;
for(int i(0);i 诚然,如果您可以使用外部库,这个问题会更容易解决,但是如果您确定不能,这个问题仍然是可以解决的
我第一次看错了这个问题。是一个类似问题的链接
#include<iostream>
using namespace std;
int removeDuplicates(int arr[], int n)
{
int j = 0;
for (int i=0; i < n; i++){
for(int j=0;j<i;j++){
if(arr[i]==arr[j]){
n--;
for (int k=i; k<n; k++){
arr[k]=arr[k+1];
}
i--; // you forgot to decrement i
}
}
}
return n;
}
#包括
使用名称空间std;
int RemovedDuplicates(int arr[],int n)
{
int j=0;
对于(int i=0;i 对于(jc++)包含所有标准C++库。这是在任意约束条件下教特定的原理和习语的学术设置吗?有两个计数。一个用于当前唯一元素,一个迭代数组。在迭代时交换相邻值以将非唯一移动到结束。或者,只要调用STD,就可以调用STD。::唯一的,可能做同样的事情。一个现成的解决方案是保留一个write
指针和一个read
指针。它们都从数组的开头开始,您只在read
下写入不在write
指针之前的值。在这个问题上,您有一个不变的read>=写
你也可以使用数组并将值复制到另一个数组(如果它们不在其中),但这通常是蛮力的方式。贝利,这很有道理。谢谢!这个答案很好,但我会在你的评论中为op发布替代方案(:我可能读错了。如果我选择对输入进行排序,然后删除重复项,我会得到一个有序的输出(即1 2 3 4 6 10 11而不是1 2 3 10 4 11 6)。@e3c你是对的,我错误地阅读了你的问题,并更新了我的答案。你不需要每次删除一个元素时都移动所有元素