Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?_C++_Sorting - Fatal编程技术网

C++ 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?

C++ 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?,c++,sorting,C++,Sorting,如果有人问我这个问题,我很抱歉,但我遇到了一个编码问题,本来应该很简单,但我一直在努力。请提供一个链接,如果已经回答(我可能只是不善于搜索) 问题:给定示例代码,请填写函数以仅返回数组中的唯一值。价值观必须保持秩序 输入示例:1、2、3、10、4、3、2、10、1、11、6 输出示例:123104116 下面是我的解决方案,但我似乎想不出一个不包括使用向量存储唯一值的简单解决方案。测试人员不喜欢使用向量,因此我只能假设附加的头/库是不可接受的。还有其他解决办法吗?我猜测试人员正在寻找要在适当位置

如果有人问我这个问题,我很抱歉,但我遇到了一个编码问题,本来应该很简单,但我一直在努力。请提供一个链接,如果已经回答(我可能只是不善于搜索)

问题:给定示例代码,请填写函数以仅返回数组中的唯一值。价值观必须保持秩序

输入示例: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你是对的,我错误地阅读了你的问题,并更新了我的答案。你不需要每次删除一个元素时都移动所有元素