【发布时间】:2018-02-06 22:08:56
【问题描述】:
有 2 个字符数组。两个数组的大小相同,并且相互杂乱无章。
例如:
char a[] = {'a', 'b', 'a', 'b', 'c', 'a', 'b', 'a', 'b', 'c' };
char b[] = {'a', 'a', 'b', 'b', 'c', 'c', 'b', 'b', 'a', 'a' };
我想在数组a中找到数组b的元素的不同位置(基于1的索引),即:1、3、2、4, 5、10、7、9、6、8,对于这个例子。
我实现了以下蛮力方法 O(n2):
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (b[i] == a[j])
{
cout << j + 1 << " ";
a[j] = '\0';
break;
}
}
}
C++ 中是否有任何方法可以将时间复杂度降低到类似 O(n * log(n))甚至更少?
【问题讨论】:
-
数组是否只包含 a、b 或 c?
-
鉴于
a和b的元素值,我不明白您是如何得出答案的。 -
您可以拥有
int char_map[256]={0}; char_map[symbol]++;的地图类型。它会在内存成本上增加一些时间。 -
@ArnavBorborah 数组由 a-z(仅小写)的任意组合组成,没有数字/特殊字符/空格。
-
@dashthird -- C++ 中的索引从 0 开始,而不是 1。为什么您的输出没有反映这一点,至少不会混淆?
标签: c++ arrays time-complexity