# top_algorithm_150 **Repository Path**: public_static_void/top_algorithm_150 ## Basic Information - **Project Name**: top_algorithm_150 - **Description**: 算法题目Python & Java - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-08-26 - **Last Updated**: 2025-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # top-interview-150 #### 介绍 算法题目源自于: https://leetcode.cn/studyplan/top-interview-150/ #### 算法总结 **一、为什么要学习算法?** 1、面试大厂 对于许多刚刚毕业、缺乏项目经验的学生来说,算法是展示自身实力的重要途径。 大厂面试中,算法题往往占据重要地位,掌握算法能够增加进入大厂的机会。 2、算法工程师 许多公司设有专门的算法工程师岗位,这是一个就业前景广阔的职业方向。 算法工程师通常要求具备扎实的算法基础,因此学习算法对于从事该岗位至关重要。 3、学习解决问题的思路 算法本质上是解决问题的方法,学习算法能够培养逻辑思维和问题解决能力。 通过学习算法,可以掌握多种解决问题的策略和方法,提升编程和解决问题的能力。 那我为什么学习算法呢?跟上面的3点无关。 我的动机很简单,就只为动动脑子,写写代码。 **二、如何学习算法** 1、系统的学习数据结构和算法 有时间的话,重温一下大学没有好好学习的数据结构和算法课程,网上很多,而且还是很好的。 2、刷算法题 刷题很高效。 一定要先自己思考,先按照自己的思路来写,思考是做题的关键。 实在想不出来方法或者写出来了但很别扭,看看题解,有些“奇妙”的方法是你闻所未闻的,那你又怎么可能想得到呢。 看题解主要看思路,不要看代码,思路清楚了,代码自己写,才能更好的理解算法。 刷题平台如LeetCode、牛客等提供了丰富的题目资源。 3、问题驱动 通过解决实际问题来学习算法,可以加深理解并提升应用能力。 举个例子,我们都知道索引能快速查询数据,你试图去了解底层原理,哦,原来它是一棵平衡树,有树,它还有双向链表,用于叶子节点快速的范围查找。 4、不断总结 养成阶段性总结的好习惯 数组用来解决快速循序访问 哈希表快速key值查找 链表快速插入和删除元素 栈是后进先出 队列双向数据插入以及弹出 堆解决最小化最大化问题 树实现层级结构 时间复杂度(考虑规模较大):O(1)< O(log n)< O(n) < O(n ^ 2), 要有空间换时间的思维,典型的应用表的索引,表的脏记录。 递归:不清楚问题遍历次数,但是可以把问题传递下去,又可以通过终止条件把结果收回来,核心是递归公式和终止条件。 动态规划:确定转移方程,问题是否可以通过之前的计算结果推导出来,通过前后关系逐步的填充结果。 **三、如何应用算法** 讲一个故事 很多年前做数仓运维工作,一天晚上被监控的同事喊起来处理故障,DB2一条插入语句报错,字段超长截断错误(没有提示哪个字段),insert语句中select的字段特别多, 由于数据上传有时效考核,不可能一个个的去排查,时间紧迫,当时就请教领导,领导告诉我你可以用一张临时表,插入一半的字段,如果没有报错, 那问题字段肯定出现在另外一半,按照相同的思路再折半,经过几轮折半很快就定位到问题了。 这个就用到了分治思想,后面有一天同样的问题,我也把这个思想传递给了一个新来的同事。 最后相信学有所用!