所以我在网上发现了这个Google采访算法问题.这真的很有趣,我还没有找到一个好的解决方案.请看一下,并给我一个提示/解决方案,如果你能用Java编写代码那将是很好的.
"设计一个算法,给定一个数组中n个元素的列表,找到在列表中出现超过n/3次的所有元素.算法应该在线性时间内运行.(n> = 0)你应该使用比较并实现线性时间.没有散列/过多空间/并且不使用标准线性时间确定性选择算法"
当我在思考快速计算数字能力的算法时,就会出现这个问题,比如计算x^n.
在Java中,递归部分类似于:
return power(x,n/2) * power(x,n/2);
Run Code Online (Sandbox Code Playgroud)
所以在程序返回值之后power(x,n/2),它会再次通过整个递归过程来计算第二个值power(x,n/2)吗?
如果是这样,我们应该先将值存储在某个变量中,然后返回该值的平方吗?
对于此for循环,运行时间为O(n)或O(n ^ 2):
char[] ar = new char[1000];
String s = "";
Arrays.fill(ar, 'a');
for(Character c: ar){
s += c;
}
Run Code Online (Sandbox Code Playgroud)
基本上,字符串上+的运行时间是多少?它如何在Java背景下工作?