首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
使用「力扣」学习算法与数据结构
liweiwei1419
创建于2021-05-26
订阅专栏
知识点和题解都会讲解。
等 1 人订阅
共34篇文章
创建于2021-05-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
《算法不好玩》专题 8:二分查找(上)代码
二分查找的基本思想是:缩小搜索区间。希望通过我的讲解,大家能够对二分查找有清晰和完整的认识,能够看懂「所有的」二分查找代码,并且融会贯通。不仅仅是知道套模板。
题解 | 面试题 17.14. 最小 K 个数(中等、优先队列、快速排序的子过程)
这道题考查了「优先队列」和「快速排序」。「优先队列」动态选出最小的 k 个数,因此不可以一开始把所有的元素都放进「优先队列」。「快速排序」需要用到快速排序的子过程 `partition`。
「力扣」第 199 题: 二叉树的右视图(中等、深度优先遍历)
「力扣」第 199 题: 二叉树的右视图 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 Python 代码:
题解 | 「力扣」第 71 题:简化路径(中等、栈)
这里依然是要突出「栈」的作用。「简化路径」的操作恰好符合了「后进先出」的规律,因此需要使用到「栈」。
题解 |「力扣」第 102 题:二叉树的层次遍历(中等)
层序遍历的代码很基础。由于层序遍历符合「先进先出、后进后出」的规律,因此需要借助「队列」实现。代码不需要记忆,写多了就记住了。
题解 | 「力扣」第 1109 题:航班预订统计(中等、差分数组)
对数组执行前缀和操作得到「前缀和」数组,对「前缀和」数组执行「差分」操作得到「原始数组」。本题通过「输入数据」在「差分数组」上的操作,进而求解「前缀和」数组,得到「原始数组」。
题解 | 「力扣」第 218 题:天际线问题(困难、优先队列、二分搜索树)
这道题首先需要仔细审题,选择最合适的数据结构。题目需要动态选取最值,可以想到可以使用「优先队列」和「二分搜索树」。因为需要支持「动态删除」操作,使用「优先队列」的时候,需要使用到「 延迟删除技巧」。
「算法不好玩」1-二分查找的基本思想
二分查找的基本思想是「减而治之」,即逐渐缩小搜索区间。「减而治之」是「分而治之」的特例,「分治算法」在拆分子问题、并解决子问题以后,需要合并子问题的解。
题解 | 「力扣」第 881 题:救生艇(中等、双指针)
重点理解可以使用「双指针」算法的原因,「双指针」算法是「暴力解法」的优化,这样的算法往往需要一定的经验和尝试。
题解 | 「力扣」第 35 题:搜索插入元素的位置(简单、二分查找)
写对「二分查找」的重点,从来不在于二分查找怎么写,而在于分析题意,根据题目的条件和要求思考如何缩减区间。
题解 | 「力扣」第 295 题:数据流的中位数(困难、优先队列)
动态选取最值元素,首先应该想到「优先队列」。这里需要充分理解「中位数」的性质,并且认真进行分类讨论。
题解 | 「力扣」第 34 题:在排序数组中查找元素的第一个和最后一个位置(中等)
写对二分查找不应该靠记忆,而是需要深刻理解二分查找的基本思想,然后仔细分析题意,认真分类讨论,才不会出错。
题解 | 「力扣」第 611 题:有效三角形的个数(中等、二分查找)
使用「二分查找」一下子数出满足条件的第 3 条边的个数。写对「二分查找」其实没有太多难度,需要仔细分析。
「力扣」第 345 题:反转字符串中的元音字母
整体思路像「双路快排」。双指针一头一尾,向中间走,遇到元音的时候停下来,然后交换,这里面的细节需要很清楚。
基数排序
基数排序是一种基于「关键字」的排序方法,这里的「关键字」是每一个数位,重点在于理解结论:低位优先的有效性。
「力扣」第 153 题、第 154 题:分治算法的解法
二分法很多时候也可以写成递归的形式,递归其实是分治算法的思想。不过一般而言,二分还是写成迭代的形式。
题解 | 「力扣」第 3 题:无重复字符的最长子串(中等,滑动窗口)
这是「滑动窗口」算法的入门问题,一定要搞清楚的事实是「滑动窗口」算法是「暴力解法」的优化,可以使用「滑动窗口」一定是和问题要求的结果分不开的。
题解:「力扣」第 802 题:找到最终的安全状态(中等、DFS、BFS)
主要考察了图的遍历。在充分理解题意的基础上,如果有一定知识储备和题量积累,有思路其实并不难。然后就是编写代码、仔细调试。
「力扣」第 611 题:有效三角形的个数(中等)
计数问题很多时候的思路是按照一定顺序找,一下子找出一个区间,可以降低时间复杂度。本题还可以帮助我们复习二分查找的使用技巧。
「力扣」第 581 题:最短无序连续子数组(栈)
这道问题关键在于审题,题目只要求我们返回「最短的连续子区间」的长度。还可以借助「栈」的结论,通过出栈元素的下标找到需要修改的左边界最小值和右边界最大值。
下一页