阿里一面凉凉....

我看别人的面经都是上来问题目...我这直接给了两道算法题....一个小时都没写出来.....

并且由于没有实习....面试官还直言先实习比较好....

忘记那个部门的了...我发了三分简历给不同的人

1、计算多叉树中最长连续序列的长度(LC549,付费题目)

public class LC549 {

    int max = 0;

    public int longestConsecutive(Multi_TreeNode root) {
        longestPath(root);
        return max;
    }

    public int[] longestPath(Multi_TreeNode node) {
        if (node == null)
            return new int[]{0, 0};
        int up = 1, down = 1;
        List<Multi_TreeNode> cs = node.childs;
        for (Multi_TreeNode c : cs) {
            if (c != null) {
                int[] l = longestPath(c);
                if (node.val == c.val + 1)
                    down = Math.max(l[1] + 1, down);
                else if (node.val == c.val - 1)
                    up = Math.max(l[0] + 1, up);
            }
        }
        max = Math.max(max, down + up - 1);
        return new int[]{up, down};
    }
}

class Multi_TreeNode {

    int val;
    List<Multi_TreeNode> childs;

    public Multi_TreeNode(int val) {
        this.val = val;
        childs = new ArrayList<>();
    }
}

2、二叉树在x轴上的投影(LC314,垂直遍历,也是付费题目)

public class LC314 {
    //测试
    public static void main(String args[]) {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);
        root.right.left = new TreeNode(6);
        root.right.right = new TreeNode(7);

        List<List<Integer>> list = new LC314().verticalOrder(root);
        int[] res = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            res[i] = list.get(i).get(0);
        }
        System.out.println(Arrays.toString(res));
    }


    /**
     * 存储在x轴上距离root的最大/小距离
     */
    int[] len = new int[2];

    /**
     * 总的结果
     */
    List<List<Integer>> res = new ArrayList<>();

    /**
     * 每一列的遍历结果
     */
    List<Integer> vertical = new ArrayList<>();

    /**
     * 垂直遍历
     * @param root  根节点
     */
    public List<List<Integer>> verticalOrder(TreeNode root) {
        getMinAndMax(root, 0);
        for (int i = len[0]; i <= len[1]; i++) {
            dfs(root, i, 0);
            res.add(new ArrayList<>(vertical));
            vertical.clear();
        }
        return res;
    }

    /**
     * 计算在x轴上距离root的最大/小距离(记水平为x轴)
     *
     * @param root 根节点
     * @param u    当前节点距离root的垂直距离
     */
    public void getMinAndMax(TreeNode root, int u) {
        if (root == null) return;
        if (len[0] > u) len[0] = u;
        else if (len[1] < u) len[1] = u;

        getMinAndMax(root.left, u - 1);
        getMinAndMax(root.right, u + 1);
    }

    /**
     *
     * @param node  当前节点
     * @param u     node距离root的距离
     * @param n     当前节点距离node的距离
     */
    private void dfs(TreeNode node, int u, int n) {
        if (node == null) return;
        if (u == n) vertical.add(node.val);
        dfs(node.left, u, n - 1);
        dfs(node.right, u, n + 1);
    }

}
#阿里巴巴#
全部评论
.... 直接劝退
1 回复 分享
发布于 2020-07-14 21:28
这题也太难了, 摆明了故意挂你的
1 回复 分享
发布于 2020-07-15 13:53
楼主你好,请问你是实习、校招还是社招?岗位是什么?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复 分享
发布于 2020-07-14 15:33
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复 分享
发布于 2020-07-14 15:34
这个也太难了吧
点赞 回复 分享
发布于 2020-07-14 20:42
好难
点赞 回复 分享
发布于 2020-07-15 20:10
兄弟,阿里云哪个部门?
点赞 回复 分享
发布于 2020-07-19 09:34
老哥你是acmer那?阿里云很恶心的,收完简历让我确认以后,一面直接给我扔了一道百度都百度不到的题,更别说lc原题了。我当时就觉得被劝退。
点赞 回复 分享
发布于 2020-07-19 09:43

相关推荐

1 8 评论
分享
牛客网
牛客企业服务