leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。
leetcode HOT100总结_第1张图片
下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。算法分类有时涉及多个类别,不一定分类准确。
在整理之前,先学习一下Python的基本数据类型有哪些,请移步这里。python 数据结构 列表、字典、元组、集合

1、排序

排序是很多解法的基础,包括数字排序、字符排序、字符串排序(字典排序等)。python实现的几大排序算法(数字)请看这里。python 实现几大排序算法(插入排序、希尔排序、基数排序、冒泡排序、归并排序、堆排序、桶排序、快速排序)。
(56)合并区间
①按照列表中每个子元素的左元素进行排序,这样就得到了以左元素为升序的列表;
②然后以左元素作为一个区间的下界,以右元素作为此区间的上界,遍历列表;
③如果一个子列表的左元素在[下界,上界]区间内,则更新上界,否则将区间插入。
(75)颜色分类
最简单的直接快排就好!但是直接调用sort进行排序显然不是面试官想要的,因此可以利用双指针进行排序。(主要就是交换)
①p0代表以0结尾的后一位,p1代表以1结尾的后一位;
②遍历列表,如果遇到1(这里先判断1,因为1在0后面,如果1移动了0不用管的),则将p1位与当前值交换;
③如遇到0,先将p0位与当前位进行交换,然后再将p1位与当前位交换(这里要先判断p1是否大于p0,可能存在没有0的情况;p1位与当前位交换是因为p0后移之后把1给替换到当前位了)。
(148)排序链表
要求时间复杂度在O(nlogn),因此要用快排或者归并排序,快排需要找到中间值在两边进行交换,这里无法实现。考虑用归并排序,用过快慢指针找到中间节点,然后先对后一段链表排序,然后将链表截断,再对前一段链表排序,最后再进行合并。
关于排序的问题,主要都是几大排序算法的变体,比如148排序链表中,就是归并排序通过链表实现,75颜色分类就是考察对排序算法中交换元素的逻辑理解能力。

2、哈希表

(1)两个数之和
(49)字母异位词分组
(76)最小覆盖子串
(136)只出现一次的数字
(347)前K个高频元素
(438)找到字符串所有字母异位词
(560)和为K的子数组
(739)每日温度

3、递归\回溯

(2)两数相加
(22)括号生成
(39)组合总数
(46)全排列
(79)单词搜索

4、链表

(19)删除链表的倒数第N个结点
(21)合并两个有序链表
(23)合并K个升序链表
(141)环形链表
(142)环形链表II
(160)相交链表
(206)反转链表

5、双指针

(3)无重复字符的最长子串
(11)盛水最多的容器
(15)三个数之和
(234)回文链表
(283)移动零
(287)寻找重复数

6、动态规划

(5)最长回文子串
(10)正则表达式匹配
(32)最长有效括号
(62)不同路径
(64)最小路径和
(70)爬楼梯
(72)编辑距离
(121)买卖股票的最佳时机
(139)单词拆分
(152)乘积最大子数组
(198)打家劫舍
(221)最大正方形
(300)最长递增子序列
(309)最佳买卖股票时机含冷冻期
(312)戳气球
(322)零钱兑换
(338)比特位计算
(416)分割等和子集
(647)回文子串

7、二分查找

(4)寻找两个正序数组的中位数
(33)搜索旋转排序数组
(34)在排序数组中查找元素的第1个和最后 1个位置
(240)搜索二维矩阵II

8、贪心

(55)跳跃游戏
(406)根据身高重建队列
(621)任务调度器

9、树

(94)二叉树中序遍历
(96)不同的二叉搜索树
(98)验证二叉搜索树
(101)对称二叉树
(208)实现Trie(前缀树)
(226)翻转二叉树
(236)二叉树的最近公共祖先
(297)二叉树的序列化与反序列化
(437)路径总和III
(538)把二叉搜索树转换为累加树
(543)二叉树直径
(617)合并二叉树

10、深度优先搜索

(17)电话号码的字母组合
(104)二叉树的最大深度
(105)从前序与中序遍历序列中构造二叉树
(114)二叉树展开为链表
(124)二叉树的最大路径和
(337)打家劫舍III
(494)目标和

11、广度优先搜索

(102)二叉树的层序遍历
(200)岛屿数量
(207)课程表
(279)完全平方数
(301)删除无效的括号

12、栈/队列

(20)有效的括号
(42)接雨水
(84)柱状图最大的矩形
(85)最大矩形
(155)最小栈
(394)字符串解码

13、数组

(31)下一个排列
(48)旋转图像
(53)最大子序和
(78)子集
(128)最长序列
(169)多数元素
(238)除自身以外数组的乘积
(448)找到所有数组中消失的数字
(581)最短无序连续子数组

14、其它

(146)LRU缓存机制
(215)数组中的第K个最大元素
(239)滑动窗口最大值
(399)除法求值
(461)汉明距离
未完待续(估计持续1-2周时间写完)

你可能感兴趣的:(python,leetcode,数据结构,算法,列表,链表,leetcode)