有一栋100层高楼,从某一层开始扔下的玻璃球刚好摔坏,现有两个玻璃球,试用最简便的方法确定这个恰好摔坏玻璃球的那层.

  • 二分法
    第一颗玻璃球: 从50层开始尝试, 75 -> 87 -> 93 -> 96 -> 98 -> 99 -> 100
    第二颗: 若在50层碎了,需要从第一层开始一层一层的尝试

  • 粗调,细调
    第一颗玻璃球: 从10层开始尝试, 20 , 30 ,40, 50, 60, 70, 80, 90.
    第二颗: 第一层开始一层一层的尝试

阅读更多

有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

  • 示例 1:
    1
    2
    3
    4
    输入:nums = [-4,-1,0,3,10]
    输出:[0,1,9,16,100]
    解释:平方后,数组变为 [16,1,0,9,100]
    排序后,数组变为 [0,1,9,16,100]
  • 示例 2:
    1
    2
    输入:nums = [-7,-3,2,3,11]
    输出:[4,9,9,49,121]
阅读更多

二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

阅读更多

1000瓶酒找1毒酒

某酒主人要宴请客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒后,会在一天后发作,现在如果我们用小白鼠进行检测,问一天内最少需要多少只小白鼠才可以检测出哪瓶有毒?

阅读更多

16辆摩托车,每辆最多可以跑100km,如果他们可以相互配合,朝同一个方向直线行驶,那么一起最多可以跑多远?

  • 1 辆车 100 km.
  • 2 辆车
    假设只有两辆车, 最多行驶 100 * 1/2 + 100 = 150 km (两辆车同时出发,行驶50 km后, 将一辆车的油加到另一辆,则这辆车可以在行使100 km)
  • 3 辆车
    假设有a,b,c三辆车, 行驶 1/3 * 100后, 三辆车都剩下 2/3 的油, 将C的油加到a,b, 则 a,b 满状态,重新出发(问题转化为两辆车)。
    总路程为: 100 * 1/3 + 100 * 1/2 + 100
  • 4 辆车
    a, b, c, d 4辆车, 行驶 1/4 后, d 的油加到 a,b,c, 转化为 3辆车。
    总路程为:100 * 1/4 + 100 * 1/3 + 100 * 1/2 + 100
  • 16 辆车
    总路程为:100 * (1/16 + 1/15 +…+ 1/3 + 1/2 + 1 )
阅读更多