【发布时间】:2015-06-14 10:02:34
【问题描述】:
我遇到了一个面试问题,尽管我一直在尝试自己解决这个问题,但我认为我需要一些帮助。
我有一个整数数组(正数和负数)代表空间中的点,两点之间的距离定义为 abs(A[i]-A[j]) 我需要检查那个距离能被给定整数 M 整除。
所以情况就是这样:
数组:[-3 -2 1 0 8 7 1]
M = 3
abs(A[1]-A[2]) = 3(例如它可以被整数整除)
复杂度应该是O(N+M),空间是O(M)
现在是这些问题
1)我知道有一种方法可以在不使用带有两个“for 循环”的明显解决方案的情况下考虑所有夫妻,因为复杂性将是 N^2,这是不可取的,但我不知道如何去做吧
2)复杂度 O(N+M) 意味着我需要使用两个 for 循环,但不能在另一个循环中使用一个?(我的意思是两个单独的 for 循环),我想在这里理解的是,如果给出的复杂性可以指导我朝着我应该使用的最佳算法前进。
3)当规范说整数名称为M,复杂度为O(N+M)时,这是否意味着整数M和复杂度有关系,或者只是名称为一样吗?
4)怎么做?
我希望我已经足够清楚了,如果没有,请告诉我,我会尝试更好地解释自己。
好的,让我们看看我是否理解正确,这是我目前正在尝试的:
int testCollection[7];
testCollection[0] = -3;
testCollection[1] = -2;
testCollection[2] = 1;
testCollection[3] = 0;
testCollection[4] = 8;
testCollection[5] = 7;
testCollection[6] = 1;
int arrayCollection[7];
for (unsigned int i = 0; i < 7; i++)
{
arrayCollection[i] = 1000;
}
for (unsigned int i = 0; i < 7; i++)
{
arrayCollection[i] = testCollection[i]%3;
}
arrayCollection 现在包含:[0, -2, 1, 0, 2, 1 ,1 ]
我第二次不明白你的意思,你能更具体一点吗?想象一下我是个孩子:)
干杯
附言我不想过多打扰您,所以如果您愿意,可以向我指出一些我可以阅读的有关该主题的文档,不幸的是,谷歌搜索我没有找到太多。
【问题讨论】:
-
关于3)当整数-是-M时,复杂度应该是O(N+M)。即,当 M 较大时,您比 M 较小时获得更多时间。
标签: arrays algorithm dynamic-programming integer-division