剑指Offer——小米+小红书笔试题+知识点总结

情景回顾

  • 时间:2016.9.23 19:00-21:00

    2016.9.24 15:00-17:00
  • 地点:山东省网络环境智能计算技术重点实验室
  • 事件:小米笔试、小红书笔试
  • 注意事项:要有大局观,该舍弃的还是要舍弃,不要在一道编程题上占用超过30分钟的时间。当你思考了15分钟,还没有好的解决方式的时候,毅然舍弃!
    public static void main(String[] args) {
        // 错误声明方式
//      int a [][3];
        // 正确声明方式
        int a [][];
        // 输出 "50.1",字符串拼接
        System.out.println("5" + 0.1);
        // 输出 "0.15",字符串拼接
        System.out.println(0.1 + "5");
}

  构造函数是由jvm创建类实例时自动调用,故其修饰符为private demo(){}

  二分查找的时间复杂度:O(logn)

完全二叉树第一个叶子节点的编号

解法1

深度为6的满二叉树的节点数为 2^6 - 1 = 63;

深度为7的满二叉树的节点数为 2^7 - 1 = 127;

或者根据log2n(往下取整)+1

因此含有100个节点的完全二叉树的深度为7,叶子节点分布在第6层和第7层。

第七层叶子节点数为:100 - 63 = 37;

37 / 2 = 18余1;

因此,第6层的前18个节点是2度节点,第19个节点是1度节点即只有左子树,没有右子树,即第6层前19个节点为非叶子节点,之后为叶子节点。

因此编号最小的叶子节点编号为:2^5 - 1 + 19 + 1 = 51.

其中,2^5 - 1位前5层非叶子节点数(由满二叉树的节点计算公式得出)。

解法2

  根据二叉树性质5:

  • 如果对于一棵有n个节点的完全二叉树(其深度depth=log2n+1下取整)的节点按层序编号(从第一层到第depth层,每层从左到右),对任一节点i(1

    <= i <= n):

    1.如果i=1,则节点i是二叉树的根,无双亲;如果i>1,则其双亲节点是i/2(下取整)。

    2.如果2i>n,则节点i无左孩子(节点i为叶子节点);否则其左孩子是节点2i;

    3.如果2i+1>n,则节点i无右孩子;否则其右孩子节点为2i+1。

  完全二叉树中,对于编号为i的父结点,左孩子编号为2*i,右孩子编号为2*i+1;

  编号为100的节点(为左孩子)对应的父节点编号为50,故最小叶子节点编号为51。

简答题

高可用技术及原理(网络、程序、开源软件)

单例设计模式

// 懒汉式
public class Singleton {
// 延迟加载保证多线程安全
    Private volatile static Singleton singleton;
    private Singleton(){}
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

// 饿汉式
class SingletonHungry{
    private final static SingletonHungry singletonHungry = new SingletonHungry();
    private SingletonHungry(){}
    // 务必使用static声明为类所属方法
    public static SingletonHungry getInstance(){
        return singletonHungry;
    }
}

线程与进程的特征及区别

  详见博文《Java进阶(四十四)线程与进程的特征及区别》。

编程题

表达式合法判断(栈的运用)

    public static boolean chkLegal(String A) {
        Stack<Character> stack = new Stack<Character>();
        for(int i = 0; i < A.length(); i++){
            Character ch = A.charAt(i);
            if(ch == '{' || ch == '[' || ch == '('){
                stack.push(ch);
                continue;
            }
            if(!stack.isEmpty()){
                Character c = stack.peek();
                if(ch == '}' && c == '{')
                    stack.pop();
                else if(ch == ']' && c == '[')
                    stack.pop();
                else if(ch == ')' && c == '(')
                    stack.pop();
            }
        }
        if (stack.isEmpty())
            return true;
        return false;
    }




剑指Offer——小米+小红书笔试题+知识点总结的更多相关文章

  1. 剑指Offer——搜狐畅游笔试题+知识点总结

    剑指Offer--搜狐畅游笔试题+知识点总结 情景回顾 时间:2016.9.24 10:00-12:00 地点:山东省网络环境智能计算技术重点实验室 事件:搜狐畅游笔试   注意事项:要有大局观,该舍 ...

  2. 剑指Offer——完美+今日头条笔试题+知识点总结

    剑指Offer--完美+今日头条笔试题+知识点总结 情景回顾 时间:2016.9.28 16:00-18:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:完美世界笔试 ...

  3. 九度 Online Judge 之《剑指 Offer》一书相关题目解答

    前段时间准备华为机试,正好之前看了一遍<剑指 Offer>,就在九度 Online Judge 上刷了书中的题目,使用的语言为 C++:只有3题没做,其他的都做了. 正如 Linus To ...

  4. 《剑指offer(第二版)》面试题60——n个骰子的点数

    一.题目描述 把n个骰子仍在地上,所有的骰子朝上的一面的点数之和为s,输入n,打印出s所有可能的值出现的概率. 二.题解 <剑指offer>上给出的两种方法,尤其是代码,晦涩难懂且没有注释 ...

  5. 结合《剑指offer(第二版)》面试题51来谈谈归并排序

    一.题目大意 给定一个数组A,对于数组A中的两个数字,如果排在前面的一个数字大于(必须大于,等于不算)后面的数字,则这两个数字组成一个逆序对.要求输出数组A中的逆序对的总数.例如,对于数组{7,5,6 ...

  6. 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

    最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...

  7. 《剑指offer(第二版)》面试题64——求1+2+...+n

    一.题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句 (即三元运算符,A? B : C) 二.题解 虽然求和问 ...

  8. 《剑指offer(第二版)》面试题55——判断是否为平衡二叉树

    一.题目大意 输入一颗二叉树,判断该二叉树是否为平衡二叉树(AVL树). 二.题解 <剑指offer>上给出了两种解决方式: 1.第一种是从根节点开始,从上往下遍历每个子节点并计算以子节点 ...

  9. 经典面试题目——找到第n个丑数(参考《剑指offer(第二版)》面试题49)

    一.题目大意 给你一个数n,要求返回第n个丑数.其中,丑数的定义如下: 丑数是指只包含因子2.3和5的数.(数字1也是丑数,不过是个特例)引用<剑指offer>上的话来说,对于一个数M,如 ...

随机推荐

  1. C#标记 [已弃用] 的方法

    [Obsolete]//标记该方法已弃用 /// <summary> /// 你应该调用本类的 OpenMessageBox 方法 /// </summary> public ...

  2. linux 基本使用命令

    arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI ...

  3. [Codeforces 750E]New Year and Old Subsequence

    Description 题库链接 给出一个长度为 \(n\) 的仅包含数字的字符串. \(q\) 次询问,每次询问该串 \([a,b]\) 段内删去几个数能够使其不含 \(2016\) 的子串,但存在 ...

  4. [HNOI 2014]米特运输

    Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...

  5. [BZOJ 5055]膜法师

    Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...

  6. AtCoder Grand Contest 021 D - Reversed LCS

    Description Takahashi has decided to give a string to his mother. The value of a string T is the len ...

  7. ●CodeForce 293E Close Vertices

    题链: http://codeforces.com/contest/293/problem/E题解: 点分治,树状数组 大致思路和 POJ 1741 那道点分治入门题相同, 只是因为多了一个路径的边数 ...

  8. POJ - 3264:Balanced Lineup

    ST表模版 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...

  9. HDU2108和HDU2036(叉乘)

    hdu2108 判断是否为凸边形 判断连续三点的叉乘 若为凸,内角<180:若为凹,内角>180 所以通过正负来判断 #include <iostream> #include ...

  10. 关于HttpClient重试策略的研究

    一.背景 由于工作上的业务本人经常与第三方系统交互,所以经常会使用HttpClient与第三方进行通信.对于交易类的接口,订单状态是至关重要的. 这就牵扯到一系列问题: HttpClient是否有默认 ...