比较两个整数数组并检查它们是否具有相等的值
Compare two integer arrays and check if they have equal values
我想知道比较两个未排序数组的最佳方法是什么,并使用C++检查它们是否具有相等的值?我在O(nlogn)中找到了一个解,但有O(n)解吗?如何,如果是的话?
请让我告诉你,这不是一个大学的问题,我想知道ACM的问题解决。
谢谢。
这取决于您的价值观以及您愿意为此花费多少内存。在包含唯一整数x的数组的O(n)解决方案中,x在0<=x<c、 您可以使用一个辅助数组char count[c]
,并执行类似的操作:
int array1[N];
int array2[N];
//get the values into array1 and 2 from somehwere
char count[c]{0};
for(size_t i=0; i<N; i++) {
count[array1[i]]++;
count[array2[i]]++;
}
现在,当且仅当count
的所有元素都是0或2时,两个数组将相等。这可以通过再次运行相同的循环在O(n)中进行检查,只是这一次,count[array1[i]]
(对于array2
也是如此)被检查为等于2。同样的技术可以适用于其他一些场景:例如,如果值是非唯一的,则必须在两个单独的数组中进行计数,然后检查这两个计数是否相等。但是,如果可能的值的数量太大,则必须将信息("x包含在数组中")存储在不同的结构中,如树中的操作在O(n log n)中,这样您就回到了起点。
相关文章:
- 检查输入是否不是整数或数字
- 检查值是否在集合p1和p2中,但不在p3中
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何检查线程是否锁定
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 如何检查QList中是否存在值
- 检查函数返回类型是否与STL容器类型值相同
- 检查是否以特定精度给出双精度
- 检查向量是否具有所有可能的字符组合
- 检查注册表项是否链接到(或副本)另一个注册表项
- 地图计数确实很重要,或者只是检查是否存在
- 检查 2 棵树是否具有相同的顺序
- std::next 是否检查我们是否已经在容器的末尾?
- "!" "== 0"是否检查 int 是否是 0 的好做法?
- 我是否检查是否存在带或不带参数的宏函数
- dynamic_cast是否检查被查询对象的type_info对象,或者递归地检查
- 在VS2010中编译c++ 11中的代码时,std::function()是否检查类型
- 如果第二个参数"0",strcmp 是否C++检查字符串中的每个值?