5

相见恨晚!互联网公司最常见的面试算法题大整理(已收录200+题目)

 2 years ago
source link: https://zhuanlan.zhihu.com/p/427047828
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

相见恨晚!互联网公司最常见的面试算法题大整理(已收录200+题目)

直接上干货,先按照算法与数据结构知识点分类的题目汇总:

链表:LintCode 35 | LintCode 36 | LintCode 98 | LintCode 102 | LintCode 103 | LintCode 450 | LintCode 1609

二分法:LintCode 458 | LintCode 457 | LintCode 75 | LintCode 28 | LintCode 14

二分答案:LintCode 183 | LintCode 319 | LintCode 437 | LintCode 963

相向双指针:LintCode 6 | LintCode 32 | LintCode 56 | LintCode 57 | LintCode 58 | LintCode 328 | LintCode 363 | LintCode 406 | LintCode 521 | LintCode 539 | LintCode 547 | LintCode 1870

宽度优先搜索:LintCode 120 | LintCode 278 | LintCode 433 | LintCode 178 | LintCode 630 | LintCode 615 | LintCode 787

二叉树遍历:LintCode 66 | LintCode 67 | LintCode 68 | LintCode 69 | LintCode 72 | LintCode 73

二叉树&分治法:LintCode 596 | LintCode 468 | LintCode 597 | LintCode 628 | LintCode 854

二叉搜索树:LintCode 85 | LintCode 95 | LintCode 689 | LintCode 902 | LintCode 915

深度优先搜索:LintCode 33 | LintCode 169 | LintCode 425 | LintCode 634 | LintCode 652 | LintCode 802 | LintCode 1909

坐标型动态规划:LintCode 76 | LintCode 109 | LintCode 114 | LintCode 115 | LintCode 1702 | LintCode 1827 | LintCode 1861

背包型动态规划:LintCode 92 | LintCode 125 | LintCode 440 | LintCode 562 | LintCode 563 | LintCode 564 | LintCode 669 | LintCode 724 | LintCode 1800 | LintCode 1915

接下来是热门公司的面试真题:

华为:LintCode 1905 | LintCode 1835 | LintCode 1254 | LintCode 1870 | LintCode 1853

腾讯:LintCode 1173 | LintCode 282 | LintCode 165 | LintCode 100 | LintCode 56

字节:LintCode 454 | LintCode 485 | LintCode 478 | LintCode 466 | LintCode 463

阿里:LintCode 1168 | LintCode 491 | LintCode 265 | LintCode 165 | LintCode 111

美团:LintCode 1173 | LintCode 282 | LintCode 165 | LintCode 100 | LintCode 56

百度:LintCode 1443 | LintCode 1188 | LintCode 1033 | LintCode 464 | LintCode 216

快手:LintCode 1295 | LintCode 1166 | LintCode 1153 | LintCode 1146 | LintCode 56

拼多多:LintCode 366 | LintCode 1835 | LintCode 1526 | LintCode 1181 | LintCode 1133

网易:LintCode 595 | LintCode 487 | LintCode 891 | LintCode 1261 | LintCode 35

滴滴:LintCode 1173 | LintCode 282 | LintCode 165 | LintCode 100 | LintCode 56

微软:LintCode 213 | LintCode 860 | LintCode 107 | LintCode 50 | LintCode 919

Shopee:LintCode 1355 | LintCode 1311 | LintCode 213 | LintCode 167 | LintCode 427

百词斩:LintCode 2208 | LintCode 2200 | LintCode 2043 | LintCode 1901 | LintCode 1880

海康威视:LintCode 1790 | LintCode 1744 | LintCode 1592 | LintCode 1536 | LintCode 127

接下来,让我们回顾几个有意思的经典互联网公司的面试题目,热热身。

题目1:黑客入侵点定位

集团内部有一核心机密项目,共由150个代码模块按顺序串行执行组成(示例:模块1->模块2->…模块N…->模块149->模块150)。偶然一天,某一个模块突然被黑客入侵(当前模块也称入侵点)。因为内部已经有预防措施,现存两款从不同角度设计的反入侵检测程序,但同时也有一定检测限制: 1.输入:顺序代码段,必须以模块1开始(比如:模块1->模块2->…模块39) 2:输出:True-输入包含入侵点,False-输入不包含入侵点 3.每款检测程序可以运行多次:可多次返回False,但仅能返回一次True(由于入侵的对抗性存在,一旦输出True即报废,后续检测功能失效) 4.同一时刻只能有一款检测程序运行,每检测一次耗时10分钟 现在希望仅利用现有的两款反入侵检测程序,在最短的时间内确保可以快速定位入侵点。具体需要如何设计检测流程,时间是多久。

相似题:

题目2:外卖小哥的保温箱

众所周知,美团外卖的口号是:”美团外卖,送啥都快”。身着黄色工作服的骑手作为外卖业务中商家和客户的重要纽带,在工作中,以快速送餐突出业务能力;工作之余,他们会通过玩智力游戏消遣闲暇时光,以反应速度彰显智慧,每位骑手拿出装有货物的保温箱,参赛选手需在最短的时间内用最少的保温箱将货物装好。 我们把问题简单描述一下: 1 每个货物占用空间都一模一样 2 外卖小哥保温箱的最大容量是不一样的,每个保温箱由两个值描述: 保温箱的最大容量 bi ,当前已有货物个数 ai ,(ai<=bi) 3 货物转移的时候,不必一次性全部转移,每转移一件货物需要花费 1秒 的时间

输入描述: 第一行包含n个正整数(1<=n<=100)表示保温箱的数量 第二行有n个正整数a1,a2,…,an(1<=ai<=100) ai表示第i个保温箱的已有货物个数 第三行有n个正整数b1,b2,…,bn(1<=bi<=100),bi表示第i个保温箱的最大容量 显然,每一个ai<=bi    
输出描述: 输出为两个整数k和t, k表示能容纳所有货物的保温箱的最少个数,t表示将所有货物转移到这k个保温箱所花费的最少时间,单位为秒.  

样例:

输入例子1: 4 3 3 4 3 4 7 6 5    
输出例子1: 2 6  

相似题:

题目3:最长公共前缀

输入n个字符串(1<=n<=300,字符串总长度L不超过1000,只包含小写字母) 后面多次查询,每次查询输入两个数字x,y,输出第x个字符串和第y个字符串的最长公共前缀长度。(查询次数K不超过100) 输入描述: 第1行输入一个整数n,代表字符串数量; 第2~n+1行,每行一个字符串; 第n+2行开始,每行输入两个整数a和b,代表需要计算公共前缀的字符串编号。 输出描述: 每次查询输出一行一个整数,表示两个字符串的最长公共前缀的长度

输入例子1: 2 abc abe 1 2    
输出例子1: 2  

相似题:

题目4:字符串排序

生活中经常有需要将多个字符串进行排序的需要,比如将美团点评的部分业务名称(外卖、打车、旅游、丽人、美食、结婚、旅游景点、教培、门票、酒店),用拼音表示之后按字母逆序排序。字母逆序指从z到a排序,比如对两个字符串排序时,先比较第一个字母按字母逆序排z在a的前面,当第一个字母一样时再比较第二个字母按字母逆序排,以此类推。特殊情况1)空字符串需排在最前面;2)若一个短字符串是另一个长字符串的前缀则短字符串排在前面。请自行实现代码进行排序,直接调用sort等排序方法将不得分且视为作弊。

输入描述: 输入为一行,由多个字符串以英文逗号拼接而成,最多不超过128个字符串且可能有重复。每个字符串由小写字母a-z组成,可以为空,最长不超过128个字符。    
输出描述: 输出一行,为排序之后的字符串,用逗号隔开   输入例子1: waimai,dache,lvyou,liren,meishi,jiehun,lvyoujingdian,jiaopei,menpiao,jiudian   输出例子1: waimai,menpiao,meishi,lvyou,lvyoujingdian,liren,jiudian,jiehun,jiaopei,dache  

题目5:工作安排

小美是团队的负责人,需要为团队制定工作的计划,以帮助团队产出最大的价值。 每周团队都会有两项候选的任务,其中一项为简单任务,一项为复杂任务,两项任务都能在一周内完成。第i周,团队完成简单任务的价值为li,完成复杂任务的价值为hi。由于复杂任务本身的技术难度较高,团队如果在第i周选择执行复杂任务的话,需要在i-1周不做任何任务专心准备。如果团队在第i周选择执行简单任务的话,不需要提前做任何准备。 现在小美的团队收到了未来N周的候选任务列表,请帮助小美确定每周的工作安排使得团队的工作价值最大。

输入描述: 第一行为N(0≤N≤1000) 接下来的N行表示第1到N周两项候选任务的价值,第i行的格式为:li hi,其中 0 < li < 10000, 0< hi < 10000。    
输出描述: 输出一个数字,表示小美团队在未来N周能产出的最大价值。  
输入例子1: 4 10 5 1 50 10 5 10 1    
输出例子1: 70  

可以确定的是,国内的算法题在难度上在easy-hard不等,而对于应试来说,基本上精刷100-200题就足矣,也不需要纠结于奇技淫巧和hard题的解法。

代码题主要考察的是面试者对编程语言的应用是否熟练,重点掌握其中蕴含的算法与数据结构知识点。

关于如何通过刷题掌握算法与数据结构,LintCode上有很详细的分类题目合集,感兴趣的话直接刷就完事儿啦!免费!!!

前方干货预警

LintCode还专门整理了2021春招高频题汇总,密码【gpt666】,欢迎来挑战!!!

pinglun区还有专属VIP赠送哦!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK