微软面试总结

内推邮箱[email protected]

 

我在这里放几道面试题让大家体会一下我们公司大体的面试难度:

1. 

现有函数

int F()

随机返回0或1,概率固定但未知(假设为p)

使用函数F()设计函数T(),使函数T()随机返回0或1。

Scenario1: 返回0或1的概率均为0.5

Scenario2: 返回0的概率为1/6, 返回1的概率为5/6

时间空间复杂度不限

其实这道题想到舍弃00和11这种两种情况就好做了。

2. 

给定一棵二叉查找树,以及某个结点的值。查找该结点的下一个结点。如果该结点是最大的,则返回 null

对于二叉查找树而言,它是中序遍历有序的。某结点的下一个结点 就是:中序遍历输出的下一个结点。

时间复杂度 OlgN

空间复杂度 O1

示例函数:

public static TreeNode reversePairedList(TreeNode root, TreeNode cur){…}

二叉树定义(没有父节点属性):

    class TreeNode

    {

        public int Value;

        public TreeNode Left;

        public TreeNode Right;

    }

我看到的比较好的solution:

package main

type TreeNode struct{

    Value int

    Left *TreeNode

    Right *TreeNode

}

var ret *TreeNode

func reversePairedList(root *TreeNode, cur *TreeNode) *TreeNode {

    for root != nil {

        if cur.Value < root.Value { // 二分遍历已遍历部分的后继结点

            ret = root

            root = root.Left

        } else { // 更新后继结点位置,遇到nil跳出循环

            root = root.Right

        }

    }

    return ret

}

 

3.

一个二叉树,定义N为有叶子结点的结点,L为叶子结点,那么给定一串前序遍历过的字符串假设(NNLLL),求这棵树的高度

例如:输入为"NNLLL",输出为3

注:树的结构应为
       N

  N       L

L    L

所以树的高度为3

其实这道题我能想到的解法就是将树建立起来,不知道有没有空间复杂度更低的办法。

你可能感兴趣的:(内推)