学习《剑指 Offer·第2版》,《代码随想录》总结
前言
我认为在面试中考察算法题的目的是检测候选者的逻辑思维,计算思维(利用基本的数据结构和算法思想工具,使用计算机高效的去解决问题),代码风格。《剑指 Offer·第2版》这本书本身是非常系统的,不推荐不看书直接做题,有戏称“全文背诵”,但是这本书有些错误,我不明白为什么一直不修正在网上也找不到说明,理解思想便可。《代码随想录》题型非常的系统,配套有视频讲解。
原书:剑指 Offer 名企面试官精讲典型编程题 第2版,代码随想录
练习:CodeTop企业题库
LeetCode Top 100(极高频,出现次数 >= 50),LeetCode Top 100 - 200(高频,出现次数 >= 20),LeetCode Top 200 - 300(较高频,出现次数 >= 10),LeetCode Top 300 - 400(出现次数 >= 5),LeetCode Top 400 - 500(出现次数 >= 3)
数据结构与算法入门:王道计算机数据结构,数据结构与算法之美,经典数据结构与算法可视化:Data Structure Visualization (usfca.edu)
计算思维指导:吴军,《计算之魂》,人民邮电出版社,2022
数据结构与算法指导:《算法导论》
我是非常反对采用一些非计算思想而是用不常用的数学技巧来面试的题目,这样其实就偏离了考察程序员算法题的初衷,还有就是算法程序可读性极差,m,n,i,j,k,flag的滥用,m,n可以默认为矩阵的行和列,i,j可以默认为两层循环的临时变量。为了一点的空间和时间复杂度的优化,将代码写的可读性极差,就算在工程上这样做能优化一点点,我觉得也是捡了芝麻丢了西瓜,如果使用滚动数组优化了内存要在代码中明确的作出说明。比如这样一道动态规划题:剑指 Offer 47. 礼物的最大价值。
class Solution { public int maxValue(int[][] grid) { int row = grid.length; int column = grid[0].length; //dp[i][j]表示从grid[0][0]到grid[i - 1][j - 1]时的最大价值 int[][] dp = new int[row + 1][column + 1]; for (int i = 1; i <= row; i++) { for (int j = 1; j <= column; j++) { dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1]; } } return dp[row][column]; } }
上面的代码可读性就很好,初级程序员应该尽快利用计算机的特点(存储,运算等),掌握基本的数据结构与算法思想的工具,不犯低级错误,比如排序算法用了O(N2)的算法,也就是说业界已知的问题已经有了成熟的方案,却使用了复杂度更高量级的方案就不对了。能独立解决问题,完成有影响力的工程工作,达到五级甚至四级工程师的水平,至于更复杂的算法问题,达到最好的算法复杂度,优化工作交给运筹学的人来做吧。吴军的谷歌方法论:“五级工程师和职业发展”。第五级工程师:能独立解决问题,完成工程工作(P5,P6);第四级工程师:能指导和带领其他人一同完成更有影响力的工作(P7,P8,P9);第三级:能独立设计和实现产品,并且在市场上获得成功(张小龙);第二级:能设计和实现别人不能做出的产品,也就是说他的作用很难取代(王坚);第一级:开创一个产业(图灵)。
数组
常用API
String
Set<String> res = new HashSet<>()
res.toArray(new String[res.size()]) : String[]
String.toCharArray() : Char[]
String.length()
String.charAt(int) : char
String.substring(int, int) : String
String.valueOf(char) : String
String.join(CharSequence, Iterabale) : String
StringBuilder.deleteCharAt(int)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?