📜  亚马逊面试经历 |设置 425

📅  最后修改于: 2022-05-13 01:58:19.986000             🧑  作者: Mango

亚马逊面试经历 |设置 425

第 1 轮:技术面 2 面。

  1. 编写一个程序来查找数组中多数元素的范围(非降序)?
  2. 编写程序打印字符串的所有排列?示例输入:AB,输出:{$,“A”,“B”,“AB”};
  3. 编写程序从给定树转换树,使得每个节点将具有子节点加上自身的总和。(编写递归函数)

就我而言,我已经回答了所有三个程序(对第二个程序有点怀疑)。

没有选择。 🙁

对于第一个问题,我的方法是:

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 的修改版)