亚马逊面试经历 |设置 425
第 1 轮:技术面 2 面。
- 编写一个程序来查找数组中多数元素的范围(非降序)?
- 编写程序打印字符串的所有排列?示例输入:AB,输出:{$,“A”,“B”,“AB”};
- 编写程序从给定树转换树,使得每个节点将具有子节点加上自身的总和。(编写递归函数)
就我而言,我已经回答了所有三个程序(对第二个程序有点怀疑)。
没有选择。 🙁
对于第一个问题,我的方法是:
public class MajorityRange {
public static void main(String args[])
{
int number[] = { 1, 3, 3, 3, 3, 3, 4 };
int size = number.length;
int start = 0;
int end = size - 1;
int count = 1;
for (int i = 1; i < size; i++) {
if (number[i] != number[i - 1]) {
if (count > size / 2) {
end = i - 1;
}
else {
start = i;
}
}
else {
count++;
}
}
System.out.println("Start = " + start + "End = " + end);
}
}
说明:以 O(n) 时间复杂度求解。为了提高复杂度,我们可以使用分而治之的策略(Jump Search 或插值 Search 的修改版)