问题:给定排序数组A找到A中所有可能的元素差异.
我的解决方案
for (int i=0; i<n-1; ++i) {
for (int j=i+1; j<n; ++j) {
System.out.println(Math.abs(ai-aj));
}
}
Run Code Online (Sandbox Code Playgroud)
当然,它是O(n ^ 2),但我根本不算数.我在网上看了一下,发现了这个:http://www.careercup.com/question?id = 9111881.它说你不能做得更好,但在接受采访时我被告知你可以做O(n).哪个是对的?
问题:假设您有一个随机数生成器randn(),它返回0到n-1之间的均匀分布的随机数.给定任意数m,写一个随机数生成器,返回0到m-1之间的均匀分布的随机数.
我的答案:
-(int)randm() {
int k=1;
while (k*n < m) {
++k;
}
int x = 0;
for (int i=0; i<k; ++i) {
x += randn();
}
if (x < m) {
return x;
} else {
return randm();
}
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?
我正在尝试编写一个程序来解决像mastermind这样的游戏,我有点卡住了.我不想要一个完整的解决方案,只需要帮助我无法通过的部分.这是游戏:
有N可能提前知道颜色.有一个未知的集合(可能有重复)k被选中并保密.目标是猜测秘密集中的颜色(重复).让我再次强调,这是一个集合,所以顺序无关紧要,但允许重复.例如
颜色是
a,b,c,d,e,f,g,h(N=8)和未知集是{a,c,c}(k=3).
进行连续猜测以产生关于秘密集的更多信息.每个猜测必须是一组(允许重复)k颜色.对每个猜测的响应是猜测和未知计数重复之间共同的颜色数.例如
猜猜:
a,d,e结果:1猜猜:
b,c,f结果:1猜猜:
a,a,g结果:1猜猜:
a,c,h结果:2猜猜:
b,e,h结果:0
在游戏开始时,没有颜色肯定在集合中或绝对不在未知集合中(假设N>1).在产生猜测之后0,已知该猜测的所有颜色都不在未知集合中.如果结果是k,那么该猜测的所有颜色都已知在未知集合中.我在编写程序时难以弄清楚其中的所有案例.例如,直到上面的最后一次猜测,对于任何颜色都不知道.在最后一次猜测之后,该集合已知a,c,c.逻辑是这样的:
b,e,h不在未知集合中a,c是未知的集合d不在未知集合中f不在未知集合中g不在未知集合中a和c.a不是在未知集合中不止一次.a,c,c …我没有包nlfilter,我没有完全遵循这个例子.
我有一个非常简单的功能fun,我想将它应用到一个移动的数组窗口.数组是Nx1,我想查看长度k间隔,比方说.因此,对于N=10与k=3和fun = @(x) min(x);我会得到
A = [13 14 2 14 10 3 5 9 15 8];
filter(A,k,fun) = [2 2 2 3 3 3 5 8];
Run Code Online (Sandbox Code Playgroud)
在这里我只想查看索引1,2,3然后2,3,4然后......然后是8,9,10,所以最后的序列是长度7.我可以用for循环轻松完成这个,但是我不知道如何为Matlab进行矢量化.请帮忙.谢谢.