c++ - 复制并取消 int 数组

标签 c++ arrays algorithm pointers

我有两个数组,都已排序。一个数组填充重复值,另一个数组填充应在第一个数组中取消的值。例如:

int * val = new int[11];
val[0] = 1; val[1] = 1;
val[2] = 2; val[3] = 2; val[4] = 2; val[5] = 2; 
val[6] = 3; 
val[7] = 4; 
val[8] = 5; val[9] = 5; val[10] = 5;

int * invalid = new int[2]; invalid[0] = 2; invalid[1] = 5;

那么输出应该是这样的

int * valid = new int[4];
valid[0] = 1; valid[1] = 1;
valid[2] = 3; 
valid[3] = 4;

如何使用 for 循环有效地实现它?我想指出,我不想切换到像 vectorlist 这样的容器,因为我知道会有评论朝那个方向发展。我明确想要使用数组。

最佳答案

如果两者都已排序,这只是一个简单的 O(N+M) 算法:从索引为零的两个数组开始,递增指向较小值的数组。如果您增加了目标数组,则复制,除非它等于无效数组。

另外,因为你只是删除项目,如果你不必保留原始数据,你可以避免一些拷贝:你可以保留一个计数器你丢弃了多少项目,并复制到同一个数组中 currentIdx-discardedCount 如果 discardedCount 大于零。

关于c++ - 复制并取消 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613233/

相关文章:

c++ - 如何调用传递给 Mock 方法的函数指针?

c++ - 如何使用 boost::program_options 接受可选标志?

javascript - 我如何告诉 Observable 我的数组已完成

javascript - 通过 javascript 从具有值的数组中创建 arraylist

algorithm - 围绕对角线对矩阵元素进行排序

C++从文件读取到 vector

c++ - C2061 : syntax error : identifier '_TCHAR'

javascript - PHP 重新排列数组并按值分组

java - 递归遍历HashMap?

python - 矩阵权重算法