- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Google面试题精讲 七月算法 曹鹏 2015年6月12日 */24 提纲 关于面试 一些例题 例1 被3和5整除的数的和 例2 合法单词 例3 和0交换的序列排序 例4 放到结尾的序列排序 例5 BFS及其推广 例6 单词对 总结 关于面试 各个公司有没有自己的题库 题库里的题目来源 员工 网络 笔试和面试 笔试 : 没有交流 面试 展现思路 给面试官好印象 */24 例1 被3和5整除的数的和 例1 给定一个数n, 求不超过n的所有的能被3或者5整除的数的和。例如: n = 9,答案3 + 6 + 5 + 9 = 23。 分析: 数学问题 被3整除的数, 3,6,9,…[n / 3] * 3 被5整除的数, 5,10,15, [n / 5] * 5 重复的数同时是3和5的倍数 15, 30, …[n / 15] * 15 注意点? n的范围 */24 例1 续 等差数列求和公式 x是首项,y是项数, d是公差 (x + x + d * (y – 1)) * y / 2, 注意y = 0也适用 关键是项数! 加 x = 3, d = 3, y = n / 3 加 x = 5, d = 5, y = n / 5 减 x = 15, d = 15, y = n / 15 */24 例2 合法字符串 例2 字符串只有可能有A、B、C三个字母组成,如果任何紧邻的三个字母相同,就非法。求长度为n的合法字符串有多少个?比如: ABBBCA是非法,ACCBCCA是合法的。 分析: 动态规划的思路——真的要枚举么? dp[i][0] : 长度为i的、最后两位不同的合法串的个数 dp[i][1]: 长度为 i的、最后两位相同的合法串的个数 递推: dp[i][0] = (dp[i-1][0] * 2 + dp[i-1][1] * 2) dp[i][1] = dp[i-1][0] */24 例2 续 初值 dp[1][0] = 3, dp[1][1] = 0 结果 dp[n][0] + dp[n][1] 空间优化 dp[i][0,1]只与dp[i-1][0,1]相关,可以省掉高维 时间复杂度 O(n) */24 例3 和0交换的排序 例3 一个整数组里包含0-(n-1)的排列 (0到(n-1)恰好只出现一次),如果每次只允许把任意数和0交换,求排好顺序至少交换多少次。 (PAT 1067) 分析: 组合数学里的圈。 例如0占了1的位置,1占了2的位置,2占了0的位置。 一个排列,总可以划分为若干个不相交的圈 上例我们交换0和1,再交换0和2,则排好顺序了 */24 例3 续 一个长度为m的圈,如果包含0,则交换(m -1)次可以恢复所有的数到原位 如果一个长度为m的圈不包含0,则交换(m+ 1) 次可以恢复所有的数到原位 例如1在2的位置,2在3的位置,3在1的位置 我们先交换0和任意一个数,例如交换0和1 则变成1在0的位置,0在2的位置,2在3的位置,3在1的位置。 */24 例3 续2 代码 */24 例4 放到结尾的排序 例4 给定一个1-n的排列,每次只能把一个数放到序列末尾,至少几次能排好顺序?(O(n)时间内解决的问题(下)) 为什么要移动1? 其他数都排好了,1自然就排好顺序了 如果某一步把x移动到末尾,则我们必须把(x + 1), (x + 2).. n都移动到末尾——否则无法排序 如何让x尽可能大? 从1-(x-1)是必须是按照顺序出现的 从开头扫描,检查x最大是多少。 */24 例4 续 代码非常简单 */24 例5 BFS及其推广 例5 给定一个矩阵X表示起点, Y表示终点,#表示墙,从每个位置只能上下左右四个方向走,不能走出矩阵, (1) 问至少多少步? (2) 如果允许最多拆3堵墙,至少多少步? */24 例5 续 分析 (1) 很简单,就是直接BFS (2) 枚举拆墙? C(n2,3) O(n6) BFS O(n2) 重新构图? 4层的有向图(0,1,2,3) 每一层(相同) 每个点(包括墙)到它的非墙邻居有边 注意:墙有出边,无入边 */24 例5 续2 第i层到第(i + 1)层 (i=0,1,2) 第i层的任意位置的邻居如果是墙,则有一条从第i层该位置到第(i + 1)层对应墙位置的边。 从第i层相当于“穿墙”到了第(i+1)层,虽然第(i+1)层该位置仍是墙,但是该位置可以出到别的位置。 在这个“立体”图上做BFS 节点数O(n2), 边数O(n2),时间复杂度O(n2) */24 例6 单词对 例6 给定一个字典,找到两个单词,它们不包含
文档评论(0)