目录
问题 1:硬币难题
假设你有 8 枚大小相同的硬币,但其中 1 枚硬币要比其他 7 枚稍重一点(但你不知道具体是哪一枚)。同时,你还有一个老式天平可以称重,从而得出哪枚硬币稍重(或是否重量相同)。那么,最少要称多少次才能找出那枚稍轻的硬币?
优秀答案:最少要称两次。方法是从 8 枚硬币中取出 6 枚,天平左右盘各放 3 枚。结果会出现两种情况:
1. 两边重量不相等。
1)左盘 3 枚硬币重,则较重的 1 枚在左盘;(右盘重的情况也一样)
2)再从3枚硬币中任取两个进行称重,若重量相等则剩下的1枚为最重的硬币;若重量不等,则再次称重这两枚硬币即可。
2. 两边重量相等。
1)天平左右盘的6枚硬币重量相等,则称剩下的 2 枚硬币,得到稍重的这枚硬币。
不太好的答案:分别取 4 枚硬币放置于天平左右盘,找出较轻的一组(4 枚),将该组硬币继续分为两组放入天平左右盘,找出较轻的一组(2 枚),再次重复此步骤找到最轻的一枚。(这种方法可能需要3次)
问题 2:在数组中进行查找
给定一个已排序的整数数组,如何找出特定整数 x 的位置?
优秀答案:使用二分搜索法。将数组中间的数字与 x 进行比较。如果相同,则找出了 x。如果数组中的数字较大,则需要查看数组后半部分。如果数字较小,则需要查看数组前半部分。通过比较数组中间元素和 x,我们可以重复搜索该数组的前后部分,从而再次将搜索范围缩小 2 倍。我们重复这一过程直至找出 x。这种算法花费的时间为 O(log n)。
不太好的答案:按顺序查看数组的每个数字,与 x 进行比较。这种算法花费的时间为 O(n)。
问题 3:A to I(字符串转换为整数)
编写一个函数将字符串转换为整数(这个函数被称为 A to I 或者 atoi()),因为我们要将一个 ASCII 字符串转换为整数。
(剑指offer有原题,还未刷到~)
优秀答案