谷歌面试10道编程题及答案(MIT版) | 面试笔记

本文总结了10道谷歌面试常见的编程题目,包括硬币难题、二分搜索、字符串转换、字符串翻转、最近邻、洗牌算法、链表循环检测、快速计算2的指数、二叉搜索树操作以及bug排查方法。每道题目均提供优秀和一般解决方案,并分析了算法效率。
摘要由CSDN通过智能技术生成

目录

问题 1:硬币难题

问题 2:在数组中进行查找

问题 3:A to I(字符串转换为整数)

问题 4:颠倒字符串中的单词顺序

问题 5:最近邻

问题 6:洗牌问题

问题 7:单链表中的循环

问题 8:计算 2^x

问题 9:二叉搜索树

问题 10:排除 bug


问题 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有原题,还未刷到~)

优秀答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值