力扣-蓝桥博文链接

目录

模拟

暴力(枚举)

组合

链表

栈与队列

递归

宽搜

指针

分析

贪心

自动机

哈希表等相关数据结构

动态规划

差分数组

拓扑排序

滑动窗口

树状数组

二分查找

区间调度

状态压缩

余数分组

正(逆)向思维

排序

日期

数学

图论

博弈论

字符串

并查集

格雷码

前缀和

位运算

python3

numpy

python数据结构

python进制转换 


模拟

13 罗马数字转整数

989 数组形式的整数加法

8 字符串转换整数 (atoi)

59 螺旋矩阵 II

67 二进制求和

319 灯泡开关

134 加油站

38 外观数列

1404 将二进制表示减到 1 的步骤数

1389 按既定顺序创建目标数组

1385 两个数组间的距离值

1422 分割字符串的最大得分

1380 矩阵中的幸运数

1374 生成每种字符都是奇数个的字符串

1360. 日期之间隔几天

1324 竖直打印单词

1317 将整数转换为两个无零整数的和

1252 奇数值单元格的数目(python3 模拟)

1253 重构 2 行二进制矩阵(python3 模拟)

1507 转变日期格式(python3 模拟)

1252 奇数值单元格的数目(python3 模拟)

1169 查询无效交易(python3 模拟)

1170 比较字符串最小字母出现频次(python3模拟)

1154 一年中的第几天(python3 模拟)

1138 字母板上的路径(python3 模拟)

1566 重复至少 K 次且长度为 M 的模式(python3 模拟)

482 密钥格式化(python3 模拟)

762 二进制表示中质数个计算置位(python3 模拟)

1539 第 k 个缺失的正整数(python3 模拟、字典)

1556 千位分隔数(python3 模拟)

1566 重复至少 K 次且长度为 M 的模式(python3 模拟)

1599 经营摩天轮的最大利润(python3 模拟)

LCP 17 速算机器人(python3 模拟)

1629 按键持续时间最长的键(python3 模拟)

868 二进制间距(python3 模拟) 

463 岛屿的周长(python3 模拟)

1073 负二进制数相加(python3 模拟两个数组相加的过程)

26 删除排序数组中的重复项(python3-java 模拟:判断相邻元素是否相同)

1646 获取生成数组中的最大值(python3 模拟)

1652 拆炸弹(python3 模拟:计算连续k个数字的和)

400 第N个数字(python3 模拟)

1662 检查两个字符串数组是否相等(python3 模拟)

468 验证IP地址(python3 模拟)

1009题是关于怎么样求解十进制数字对应的二进制数字长度的题目

1009 十进制整数的反码(python3 模拟)

165 比较版本号(python3 模拟)

485 最大连续1的个数(python3 模拟)

1046 最后一块石头的重量(python3 模拟、大根堆)

1678 设计 Goal 解析器(python3 模拟)

1684 统计一致字符串的数目(python3 模拟)

860 柠檬水找零(python3 模拟)

1528 重新排列字符串(python3 模拟)

1688 比赛中的配对次数(python3 模拟)

1694 重新格式化电话号码(python3 模拟)

1700 无法吃午餐的学生数量(python3 模拟)

1701 平均等待时间(python3 模拟)

1720 解码异或后的数组(python3 模拟)

1736 替换隐藏数字得到的最晚时间(python3 模拟)

暴力(枚举)

11 盛最多水的容器

22 括号生成

221 最大正方形

1408 数组中的字符串匹配

1442 形成两个异或相等数组的三元组数目

1437 是否所有 1 都至少相隔 k 个元素

1438 绝对差不超过限制的最长连续子数组

1351 统计有序矩阵中的负数

1275 找出井字棋的获胜者(python3)

1237 找出给定方程的正整数解(python3)

648 单词替换(python3)

1512 好数对的数目(python3)

1508 子数组和排序后的区间和(python3)

1492 n 的第 k 个因子(python3)

1534 统计好三元组(python3)

1550 存在连续三个奇数的数组(python3)

1608 特殊数组的特征值(python3)

1010 总持续时间可被 60 整除的歌曲(python3)

1615 最大网络秩(python3 统计节点的度数 + 枚举)

1620 网络信号最好的坐标(python3 枚举、字典存储坐标点)

1630 等差子数组(python3 暴力破解)

867 转置矩阵(python3 暴力)

1637 两点之间不包含任何点的最宽垂直面积(python3 枚举)

1672 最富有客户的资产总量(python3 枚举)

1014题在暴力的基础上进行了优化,使得时间复杂度降低了很多

1014 最佳观光组合(python3 暴力的优化)

28 实现 strStr()(python3 暴力 字符串的匹配)

164 最大间距(python3 枚举、桶排序思想计算相邻元素的最大间距)

1672 最富有客户的资产总量(python3 枚举)

组合

计算出不同种类的数目之后将两个结果相乘那么最终得到的结果就是不同种类的组合情况

477 汉明距离总和(python3 位运算)

1588 所有奇数长度子数组的和(python3 前缀和、组合)

1010 总持续时间可被 60 整除的歌曲(python3 余数组合)

链表

21 合并两个有序链表

2 两数相加

203 移除链表元素

61 旋转链表

160 相交链表(python3: 看成两个链表连接在一起)

栈与队列

使用栈解决的题目有一个典型的特点:需要根据当前的元素的某些条件决定怎么样处理上一个元素,此外元素之间的匹配问题都是可以使用栈来解决的,理解一下栈解决的1047题、1544题、1598题对栈的模型就比较熟悉了(反正是一看到存在这种特点的一定是可以使用栈来解决的)

921 使括号有效的最少添加

150 逆波兰表达式求值

224 基本计算器

227 基本计算器 II

20 有效的括号

1311 获取你好友已观看的视频(set、map、优先队列排序)

1249 移除无效的括号(python3)

1190 反转每对括号间的子串(python3)

1544 整理字符串(python3 栈)

1598 文件夹操作日志搜集器(python3 栈)

1614 括号的最大嵌套深度(python3 栈:匹配的策略:当发现右括号的时候进行答案的更新)

1047 删除字符串中的所有相邻重复项(python3 栈)

1021 删除最外层的括号(python3 栈:括号匹配)

581题结合了排序的思想并且使用到了栈的一个作用:匹配元素适当的位置(结合排序思想可以用来寻找无序数组的最小边界与最大边界)

581 最短无序连续子数组(python3 排序-双指针、栈匹配元素对应的位置)

735 行星碰撞(python3 栈匹配元素)

1696题使用了python中的优先队列(元素可以被赋予优先级别)PriorityQueue进行优化,优先队列可以设置元素的优先级别所以可以优先处理队列中的某些元素

1696 跳跃游戏 VI(python3 动态规划、优先队列优化)

单调栈

可以使用栈来维护一个长度k的递增子序列或者是递减子序列

单调栈的简单应用(python3)

1673 找出最具竞争力的子序列(python3 单调栈)

递归

① 检查图的连通性问题(使用并查集也可以解决):可以将与当前位置相关的位置统统搜索到连接在一起,比如水洼问题、岛屿问题

② 尝试所有的可能性才可以得到最佳方案的问题(需要搜索所有的可能性),这一类问题是可以使用递归解决的一类经典问题,我们需要尝试不同的组合来得到最佳的方案(数据量小的时候递归可以解决但是当数据量很大的时候一般使用动态规划的思路解决)

比如搜索二维矩阵中的路径问题(从起点(0, 0)到终点(row - 1, col - 1)的路径问题),字符串组合的最佳方案问题等等

③ 二叉树或者N叉树的问题,比如求解关于二叉树中的路径问题,叶子节点的相关问题,最近公共祖先等问题(树本身就是递归递归定义的所以一定是可以使用递归去解决的)

306 累加数

111 二叉树的最小深度

332 重新安排行程

322 零钱兑换

51 N皇后

50 Pow(x, n)

90 子集 II

77 组合

78 子集

9 回文数

12 整数转罗马数字

22 括号生成

39 组合总和

40. 组合总和 II

55 跳跃游戏

1323 6 和 9 组成的最大数字

64 最小路径和

112 路径总和(找到一个满足条件直接返回true)

113 路径总和 II

695 岛屿的最大面积

200 岛屿数量

129 求根到叶子节点数字之和

110 平衡二叉树

100 相同的树

101 对称二叉树

46 全排列

168 Excel表列名称

32 最长有效括号

130 被围绕的区域

63 不同路径

62 不同路径

22 括号生成

17 电话号码的组合

139 单词拆分

241 为运算表达式设计优先级

79 单词搜索(找到一个满足条件直接返回true)

1367 二叉树中的列表(找到一个满足条件直接返回true)

38 外观数列

61 旋转链表

53 最大子序和

1391 检查网格中是否存在有效路径(找到一个满足条件直接返回true)

93. 复原IP地址

98 验证二叉搜索树

1457 二叉树中的伪回文路径

1466 重新规划路线(建立双向联系)

1376 通知所有员工所需的时间(树的最大深度)

1339 分裂二叉树的最大乘积

1325 删除给定值的叶子节点

1319 连通网络的操作次数

1305 两棵二叉搜索树中的所有元素

1306 跳跃游戏 III

1267 统计参与通信的服务器(python3类似于水洼问题修改列表的值)

1260 二维网格迁移(python3倒序遍历二维列表)

1254 统计封闭岛屿的数目(python3 dfs)

1238 循环码排列(python3格雷码)

1239 串联字符串的最大长度(python3)

1219 黄金矿工(python3 dfs搜索所有的路径)

1514 概率最大的路径(python3 dfs、bfs)

面试题 04.01. 节点间通路(python3 dfs 找到一条符合的路径直接返回True)

1519 子树中标签相同的节点数(python3 dfs)

1161 最大层内元素和(python3 dfs使用一个变量来记录树的层数)

1145 二叉树着色游戏(python3 dfs)

1129 颜色交替的最短路径(python3 dfs)

1130 叶值的最小代价生成树(python3 dfs)

1123 最深叶节点的最近公共祖先(python3 dfs)

279 完全平方数(python3 dfs)

222 完全二叉树的节点个数(python3 递归)

216 组合总和 III(python3 递归)

230 二叉搜索树中第K小的元素(python3 BST的中序遍历:注意类名与self.访问属性的区别)

231 2的幂(python3 递归、位运算)

240 搜索二维矩阵 II(python3 递归、二分查找)

236 二叉树的最近公共祖先(python3后序遍历)

257 二叉树的所有路径(python3 dfs)

865 具有所有最深结点的最小子树(python3 递归:方法中声明两个TreeNode变量使用层层往上传递结果来保存最深的节点)

404 左叶子之和(python3 递归:使用一个变量标记)

37 解数独(python3 dfs找到满足条件的直接返回True)

538 把二叉搜索树转换为累加树(python3 反序中序遍历)

397 整数替换(python3 递归尝试各种可能的组合)

987 二叉树的垂序遍历(方法中传入两个参数记录坐标、字典存储元祖-值的对应关系)

面试题 04.02. 最小高度树(python3 dfs 创建二叉搜索树 )

1593 拆分字符串使唯一子字符串的数目最大(python3 递归)

1594 矩阵的最大非负积(python3 递归)

1545 找出第 N 个二进制字符串中的第 K 位(python3 递归左右两边可以看成是对称的位置)

下面的1530题感觉好经典,解决的思路很巧妙值得学习学习,特别是使用层层返回的时候来更新当前节点与左右子树的距离以及数目的技巧,然后计算出当前节点左右子树的组合情况非常巧妙(其中使用到的一个count数组也是非常巧妙:每一层的节点都是有一个count数组,对应当前节点下的左右子树的情况,然后利用下一层的节点的值在返回到上一层的时候来更新当前的节点)

1530 好叶子节点对的数量(python3 递归:层层返回数组进行更新)

LCP 07 传递信息(python3 dfs: 搜索所有路径(使用字典来存储能够使用下标访问的图))

面试题 16.19 水域大小(python3 dfs 连通性问题)

419 甲板上的战舰(python3 dfs连通性检测)

1625 执行操作后字典序最小的字符串(python3 dfs执行两个操作)

491题与90题是很类似的可以对照着理解,并且着重理解去重的技巧(特别是在for循环中递归的去重技巧)

491 递增子序列(python3 dfs搜索所有的递增子序列 + 去重技巧)

1631题是一道非常经典的dfs + 二分查找优化的问题,通过二分查找的中间值传递到dfs方法中可以来决定二分查找的方向,可以降低dfs搜索的时间复杂度

1631 最小体力消耗路径(python3 dfs + 二分查找优化)

450是一道经典的递归删除节点的题目,其中的优化代码涉及到很多节点之间复杂的指针修改关系

450 删除二叉搜索树中的节点(python3、java递归删除节点)

814题根据递归调用层层返回的结果来处理当前这一根节点的左右孩子,并且对于树的相关题目我们最好是画出具体的图来帮助我们更好理解节点之间处理的细节,并且需要利用好好由下往上节点层层返回返回的特点

814 二叉树剪枝(python3 利用递归调用返回的结果来删除节点)

669 修剪二叉搜索树(python3 递归创建删除节点后的子树)

1641 统计字典序元音字符串的数目(python3  递归求解所有按照字典序排列的字符串组合)

在树的相关题目中,对于树的遍历之后处理的方法存在两种,第一种是自上往下处理节点,第二种是自下往上处理节点(利用的是每一次递归调用都会返回到当前的节点,也就是递归层层返回的特点),自上往下处理节点是在递归方法的一开始就对节点的情况进行处理,自下往上处理节点是利用当前根节点往下递归的返回值或者节点的值进行处理,我们在写递归方法的可以分析题目看哪一种方法处理起来更加简便那么就选择哪一种方法进行处理,1315是经典的自下往上比较好处理节点的题目

1315 祖父节点值为偶数的节点和(dfs 自下往上处理节点、bfs)

1073 负二进制数相加(python3 模拟两个数组相加的过程、递归)

934题是dfs染色标记 + bfs搜索最短路径的题目

934 最短的桥(python3 dfs标记 + bfs搜索最短路径)

剑指 Offer 13 机器人的运动范围(dfs 搜索可以到达的所有位置)

863题是关于左孩子节点、右孩子节点以及父节点之间的怎么样建立联系的题目,其中利用到了递归层层返回的特点来求解当前节点的父节点到另外一个子树的距离

863/934题都是结合了dfs与bfs两种搜索的方法,其中bfs可以搜索距离为K的所有节点

863 二叉树中所有距离为 K 的结点(python3 dfs + bfs)

513 找树左下角的值(python3 dfs、bfs)

700 二叉搜索树中的搜索(python3 递归)

877题是一道存在重复子问题的递归题目,我们知道当方法中的有多少个参数在变化的时候那么我们就需要多少维的列表来记录之前已经求解过的值,对于这道题目来说当左范围与右范围相同的时候那么说明递归下去就是重复求解了,所以使用一个二维列表来记录,我们可以在递归方法调用之后将递归的结果存储到列表中,这样我们在递归方法的一开始的时候就可以通过列表的值判断之前是否已经求解过了,假如求解过那么直接返回这个值即可

877 石子游戏(python3 记忆型递归、动态规划)

395题当不满足条件的时候以字符作为分割求解剩下的子串是否满足条件

395 至少有K个重复字符的最长子串(python3 递归)

162 寻找峰值(python3 分析、递归二分查找)

590 N叉树的后序遍历(python3 递归、迭代)

蓝桥杯

平方拆分(第十届蓝桥杯国赛Java-B组 java-python dfs )

方格填数(python3 dfs)

宽搜

使用宽搜思路解决的题目有一个明显的特点是:从起点到终点的最少步数,像走迷宫,在数轴的位置上从起点到终点的最少步数等问题,此外宽搜还可以关于二叉树的层次问题,如求出二叉树的深度,每一层中最右边节点等问题

bfs基本步骤:① 声明一个队列并且初始化队列的第一个节点 ② 弹出队首节点,对队首节点进行处理 ③ 往队列中加入弹出节点的周围邻接节点

使用python语言的时候经常会借助于collections.deque()来声明一个双端队列,并且对于二叉树的相关题目经常会使用到元组来表示当前的节点以及深度(感觉python中的元组非常方便地表示了节点与深度之间的关系)

1162 地图分析

101 对称二叉树

127 单词接龙

752 打开转盘锁

139 单词拆分

1311 获取你好友已观看的视频(set、map、优先队列排序)

1514 概率最大的路径(python3 dfs、bfs)

279 完全平方数(python3 dfs、bfs)

1609 奇偶树(python3  bfs: 使用for循环遍历列表模拟队列先进先出)

1315 祖父节点值为偶数的节点和(python3 dfs 自下往上处理节点、bfs)

365 水壶问题(python3 bfs 类似于蓝桥杯的分酒问题、数学推导-裴蜀定理)

1654 到家的最少跳跃次数(python3 bfs:从起点到终点的最少步数)

934题是dfs染色标记 + bfs两个搜索方法结合搜索最短路径的题目

934 最短的桥(python3 dfs标记 + bfs搜索最短路径)

199 二叉树的右视图(python3 bfs 找出每一层最右边的节点)

bfs可以用来求解所有距离为K相同的节点:在队列中发现第一个节点距离为K的时候队列中的元素都是距离为K的(bfs可以看成是沿着当前的位置向周围相同的距离进行扩展的)

863 二叉树中所有距离为 K 的结点(python3 dfs + bfs)

513 找树左下角的值(python3 dfs、bfs)

542题使用到了多源bfs方法进行广度优先搜索,一开始的时候往队列(python一般使用collections.deque()声明一个双端队列)中加入多个节点并且使用set集合标记加入队列中的这些节点,然后开始往周围的邻接搜索,如果是二维平面的多源bfs搜索那么我们就可以将当前二维平面的所有整数点看成是两个不同的集合,我们从标记的集合节点出发搜索另外一个集合的元素,可以知道标记的集合中的节点哪一个先到达另外一个节点的位置那么表示另外一个集合到标记集合的最短距离就确定了,从而一次bfs可以解决多个源点到目标节点最短路径的问题

542 01 矩阵(单源bfs、多源bfs)

指针

5 最长回文子串

11 盛最多水的容器

1 两数之和

15 三数之和

18 四数之和

202 快乐数

1346 检查整数及其两倍数是否存在

1237 找出给定方程的正整数解(python3 双指针)

面试题 16.06 最小差(python3 排序 + 二分查找--双指针)

1577 数的平方等于两数乘积的方法数(python3 双指针)

1550 存在连续三个奇数的数组(python3)

26 删除排序数组中的重复项(python3-java 模拟:判断相邻元素是否相同、双指针)

581 最短无序连续子数组(python3 排序-双指针、栈匹配元素对应的位置)

1679 K 和数对的最大数目(python3 使用字典对余数分组、排序 + 双指针)

1711 大餐计数(python3 双指针、字典)

分析

递归返回值为List嵌套类型的中间结果记录

223 矩形面积

7 反转整数

31 下一个排列

892 三维形体的表面积

168 Excel表列名称

48 旋转图像

319 灯泡开关

1222. 可以攻击国王的皇后

LCP 06 拿硬币

1419 数青蛙

61 旋转链表

73. 矩阵置零

1404 将二进制表示减到 1 的步骤数

1403 非递增顺序的最小子序列

1390 四因数

1450 在既定时间做作业的学生人数

1455 检查单词是否为句中其他单词的前缀

1465 切割后面积最大的蛋糕

1375 灯泡开关 III

1365 有多少小于当前数字的数字

1332 删除回文子序列

5428 重新排列数组

1295 统计位数为偶数的数字

1290 二进制链表转整数

1291 顺次数

1287 有序数组中出现次数超过25%的元素

1480 一维数组的动态和(python3)

1481 不同整数的最少数目(python3)

1281 整数的各位积和之差(python3)

1266 访问所有点的最小时间(python3)

1221. 分割平衡字符串(python3)

1217 玩筹码(python3)

1209 删除字符串中的所有相邻重复项 II(python3)

1513 仅含 1 的子串数(python3等差数列)

1509 三次操作后最大值与最小值的最小差(python3)

1492 n 的第 k 个因子(python3)

1493 删掉一个元素以后全为 1 的最长子数组(python3)

1518 换酒问题(python3)

1191 K 次串联后最大子数组之和(python3)

1185 一周中的第几天(python3日期)

1535 找出数组游戏的赢家(python3)

1536. 排布二进制网格的最少交换次数(python3)

1175. 质数排列(python3)

1171 从链表中删去总和值为零的连续节点(python3前缀和)

1156 单字符重复子串的最大长度(python3)

1144 递减元素使数组呈锯齿状(python3)

1578 避免重复字母的最小删除成本(python3)

738 单调递增的数字(python3 从后往前找逆序的位置)

1432 改变一个整数能得到的最大差值(python3)

160 相交链表(python3)

1560 圆形赛道上经过次数最多的扇区(python3)

1561 你可以获得的最大硬币数目(python3 排序)

1562 查找大小为 M 的最新分组(python3 元组与变量协同记录连续的1的数目)

1541 平衡括号字符串的最少插入次数(python3 使用变量进行括号匹配)

1523 在区间范围内统计奇数数目(python3)

1557 可以到达所有点的最少点数目(python3 统计入度为0的点集)

1616 分割两个字符串得到回文串(python3)

1053 交换一次的先前排列(python3 从后往前找第一个逆序的位置)

419 甲板上的战舰(python3)

763 划分字母区间(python3 贪心、分析)

299 猜数字游戏(python3-java 两个字典记录不匹配数字出现的次数,字符对应的数组向右位置进行自增与自减进行匹配)

1653 使字符串平衡的最少删除次数(python3 分析、动态规划)

1664 生成平衡数组的方案数(python3 动态规划、分析)

1665 完成所有任务的最少初始能量(python3 二分查找、分析)

769 最多能完成排序的块(python3 分析)

1446 连续字符(python3 统计连续相同的字符出现的最大次数)

162 寻找峰值(python3 分析、递归二分查找)

1680 连接连续二进制数字(python3 位运算、分析)

1689 十-二进制数的最少数目(python3 分析:通过分析题目找出对应的规律)

贪心

1405 最长快乐字符串

334 递增的三元子序列(python3找出第一小与第二小的数字)

1145 二叉树着色游戏(python3)

1561 你可以获得的最大硬币数目(python3 排序)

1605 给定行和列的和求可行矩阵(python3)

763 划分字母区间(python3 贪心、分析)

1642 可以到达的最远建筑(python3 贪心)

1663 具有给定数值的最小字符串(python 3 贪心)

435与452题都是关于区间调度的类似的问题

435 无重叠区间(python3 贪心求解最多不相交区间的数目 区间调度问题)

452 用最少数量的箭引爆气球(python3 贪心、区间调度问题)

1007 行相等的最少多米诺旋转(python3 字典记录数字出现的位置、贪心)

767 重构字符串(python3 大根堆--贪心)

1054 距离相等的条形码(python3 大根堆--贪心)

991 坏了的计算器(python3 正向思维与逆向思维、贪心)

1710 卡车上的最大单元数(python3 贪心、排序)

自动机

8 字符串转换整数 (atoi)

哈希表等相关数据结构

主要包括了以下几个方面的应用:map映射、计数 ,set集合(去重),list集合(列表),字典(dict)

将相同的东西放在一起或者是计数的问题都可以使用哈希表来解决(例如计算所有的数字或者是所有的字符的出现次数),哈希表是一种数据结构,对于不同的语言有不同的表现形式,c++或者是java语言可以使用map、python语言可以使用字典dict来表示哈希表(哈希表主要用来解决计数与映射关系:y = f(x),相当于一个函数),使用哈希表进行计数之后可以通过遍历哈希表的键值对,通过当前的键来寻找哈希表中是否存在另外一个和为target的数字(1711题)

python中可以使用字典来表示哈希表,经常使用collections.defaultdict(int)或者是collections.defaultdict(list)创建,int和list表示字典中值的类型,当字典中不存在这个值的时候那么默认值为0或者是list,这样就可以直接进行计数或者是添加对应的元素到键对应的list列表中,省略判断键是否存在于字典的步骤,此外还可以使用collections.Counter方法统计直接统计字符或者数字出现的次数

90 子集 II

3 无重复字符的最长子串

40. 组合总和 II

1 两数之和

49 字母异位词分组

13 罗马数字转整数

332 重新安排行程(倒着插入元素到List中)

12 整数转罗马数字

205 同构字符串

1418. 点菜展示表

1410 HTML 实体解析器

1394 找出数组中的幸运数

1391 检查网格中是否存在有效路径

1282 用户分组

169 多数元素

1441 用栈操作构建数组

1451 重新排列句子中的单词

1452. 收藏清单

1457 二叉树中的伪回文路径

1436 旅行终点站

1424 对角线遍历 II

1365 有多少小于当前数字的数字

1366 通过投票对团队排名(java8语法,list转为map进行排序)

1346 检查整数及其两倍数是否存在

1347 制造字母异位词的最小步骤数

1337. 方阵中战斗力最弱的 K 行

1338. 数组大小减半

1333 餐厅过滤器(TreeMap)

5429 数组中的 k 个最强值

1309 解码字母到整数映射

1311 获取你好友已观看的视频(set、map、优先队列排序)

1296 划分数组为连续数字的集合(treemap)

1291 顺次数

1287 有序数组中出现次数超过25%的元素

1481 不同整数的最少数目(python3的Collections中的Counter方法对列表中的元素进行计数)

1207 独一无二的出现次数(python3的Collections.Counter方法将列表转换为字典进行计数)

1189 “气球” 的最大数量(python3)

1160 拼写单词(python3)

1128 等价多米诺骨牌对的数量(python3)

1122 数组的相对排序(python3)

229 求众数 II(python3的Collections.Counter方法计数)

219 存在重复元素 II(python3)

220 存在重复元素 III(python3 分桶)

1577 数的平方等于两数乘积的方法数(python3 字典计数)

1583 统计不开心的朋友(python3字典:index函数的使用)

506 相对名次(python3 字典映射)

825 适龄的朋友(python3 字典计数)

剑指 Offer 56 - II. 数组中数字出现的次数 II(字典、位运算)

560 和为K的子数组(python3 前缀和、字典)

1539 第 k 个缺失的正整数(python3 模拟、字典)

1540 K 次操作转变字符串(python3 字典计数)

1525 字符串的好分割数目(python3 两个字典对左右两边的字符进行计数)

1010 总持续时间可被 60 整除的歌曲(python3字典映射)

1604 警告一小时内使用相同员工卡大于等于三次的人(python3字典映射)

387 字符串中的第一个唯一字符(python3 字典计数)

1051 高度检查器(python3 计数)

1620 网络信号最好的坐标(python3 枚举、字典存储坐标点)

1624 两个相同字符之间的最长子字符串(python3 字典记录字母第一次出现的位置)

349 两个数组的交集(python3 字典、&运算求解两个集合的交集)

1640 能否连接形成数组(python3 字典记录数字出现的位置)

python对字典进行排序的时候可以使用lambda表达式定义排序的规则:dic = sorted(dic.items(), key=lambda x:(x[1], -x[0])),当传入两个参数的时候第一个参数表示的是先按照第一个参数(键或者是值,x[0]表示键,x[1]表示值)进行排序,当第一个参数相同的时候然后再按照第二个参数进行排序,对值为int类型的值进行排序的时候可以对第二个参数添加负号表示降序排序(前提是第一个参数是升序排序,reverse=True或者是默认不写)

1636 按照频率将数组升序排序(python3 字典统计数组中各个数字出现的次数:python可以定义键值对的排序规则)

299 猜数字游戏(python3 两个字典记录不匹配数字出现的次数)

1647 字符频次唯一的最小删除次数(python3 字典统计字符出现的次数 + 排序)

在前缀和的题目中,经常会使用到与字典(哈希表)一起检查是否存在和为x的区间,其中1546/1658题使用的都是前缀和 + 字典的方式来寻找某一个区间和等于目标值x的方法

1546 和为目标值的最大数目不重叠非空子数组数目(python3 前缀和 + 字典优化)

1658 将 x 减到 0 的最小操作数(python3 字典、前缀和计算某一个区间的和)

1657 确定两个字符串是否接近(python3 字典统计字符出现的次数)

448 找到所有数组中消失的数字(python3 字典记录出现过的数字)

1007 行相等的最少多米诺旋转(python3 字典记录数字出现的位置、贪心)

1368题使用字典来记录每一行位置被预约的情况,使用collections.defaultdict(list)来创建能够为键添加多个元素的字典,字典的值为list列表,假如需要将某些值存储到字典中不存在的键中,会默认创建一个空的list列表这样就可以直接将多个元素添加到键对应的list中(一开始的时候没有什么特别好的思路所以使用字典来记录每一行的位置的情况,并且根据题目描述的求解方式求解出答案看是否可以解决问题)

1386 安排电影院座位(python3 字典、位运算)

1542题是一道经典的前缀和 + 哈希(字典)思想的题目

1542 找出最长的超赞子字符串(python3 状态压缩、前缀和 + 哈希思想)

767 重构字符串(python3 大根堆--贪心、字典统计字符出现的次数)

1054 距离相等的条形码(python3 大根堆--贪心、字典统计数字出现的次数)

1497是一道关于余数的经典题目,使用字典对余数进行分组,检查是否能够被k进行整除:对k取余之后相加的结果等于k那么取余之前相加的结果肯定能够被k整除(已知一个数检查和为k的另外一个数是否存在就可以使用字典来进行检查)

1497 检查数组对是否可以被 k 整除(python3 使用字典对余数进行分组)

1679 K 和数对的最大数目(python3 使用字典对余数分组、排序 + 双指针)

1711 大餐计数(python3 双指针、字典)

1695 删除子数组的最大得分(python3 滑动窗口、前缀和、字典标记是否存在重复)

动态规划

动态规划的思路一般求解的是关于最佳方案的问题,最基本的动态规划应该是使用一维数组或者二维数组进行递推,从上一个状态递推到当前状态,直到到达最后一个状态(1621是一道经典的动态规划题)

313 超级丑数

55 跳跃游戏

221 最大正方形

64 最小路径和

120 三角形最短路径和

62 不同路径

53 最大子序和

1277 统计全为 1 的正方形子矩阵(python3)

152 乘积最大子数组(python3)

1223 掷骰子模拟(python3三维列表)

1218 最长定差子序列(python3)

1191 K 次串联后最大子数组之和(python3最大连续子数组的和)

1139 最大的以 1 为边界的正方形(python3)

1130 叶值的最小代价生成树(python3)

1594 矩阵的最大非负积(python3 与152题乘积最大子数组类似:使用两个变量记录当前位置的最小值与最大值)

1524 和为奇数的子数组数目(python3 以当前位置i结束的子数组的前缀和)

1525 字符串的好分割数目(python3 递推)

1567 乘积为正数的最长子数组长度(python3 152-1567-1594都是类似的问题)

96 不同的二叉搜索树(python3 递推(卡塔兰数))

322与474题是关于背包问题的比较经典的问题

474 一和零(python3 零一背包变体)

322 零钱兑换(python3 完全背包)

300题与1626题本质上都是LIS模型(最长上升子序列),300题中贪心 + 二分查找解决的思路是非常棒的

300 最长上升子序列(python3 动态规划、贪心 + 二分查找)

1626 无矛盾的最佳球队(python3 LIS)

410 分割数组的最大值(python3 二分查找、动态规划)

1641 统计字典序元音字符串的数目(python3 递归、由上一个状态递推出当前的状态)

1027是一道比较经典由前面状态递推出当前状态的的动态规划题目,而且对于关于数据规模比较大的数组类的最优问题基本上是可以使用动态规划去解决的,并且我们定义的dp数组的含义经常是以当前位置i结尾的数字对应的...最优...,为什么这样定义呢:因为这样就可以从前面状态递推出当前的状态,我们可以将当前结尾的这个数字尝试添加到之前的状态中看是否可以构成更优的方案
我感觉动态规划需要培养的就是第一个怎么样定义dp数组的含义,一维还是二维还是三维,第二个是写出具体的状态转移方程,这道题目是比较好理解的状态转移的题目,可以好好学习一下

1027 最长等差数列(python3 动态规划)

1638是一道关于两个字符串的子串匹配的动态规划问题(以当前位置的字符结尾对应长度的子串的匹配第二个字符串中相同长度的子串问题),关于字符串的动态规划题目,对于dp的含义多往以上一个字符结尾对应的dp数组的值...去想,以上一个字符结尾的dp数组的值推导出当前位置对应的dp数组的值

1638 统计只差一个字符的子串数目(python3 动态规划)

1653题理解二维dp的含义,在上一步的基础上进行迭代得到当前状态下dp数组的值

1653 使字符串平衡的最少删除次数(python3 分析、动态规划)

面试题 16.17 连续数列(python3 动态规划)

1664 生成平衡数组的方案数(python3 动态规划、分析)

877题是一道很经典的动态规划题目,由一个小范围的值推导出更大范围的值(无后效性),这里需要注意的是怎么样利用两层循环由小范围的值推导出更大范围的值

877 石子游戏(python3 记忆型递归、动态规划)

动态规划需要使用到dp数组,而且一开始的时候最简单的方法是根据需要求解的问题以及涉及到的几个参数来确定需要使用几维的dp数组,确定之后需要明确dp数组的含义,dp数组的含义很重要因为会关系到接下来如何由小范围的dp数组的值推导出dp数组更大范围的值,假如是二维dp通常需要使用到两层循环,这个时候就涉及到怎么样由小的范围确定大的范围的dp数组值,一般都是以最外层的循环为右边界一直递推到0这个范围从而确定dp[0][r]的值,每一次都是这样推导从而最终得到最大范围的dp数组的值,877题与1335就是二维的dp数组根据两层循环以最外层循环为右边界往左边进行推导(可以多理解一下这两道题目中使用两层循环从右边界往左推导的过程以及表达的具体含义可能对dp解决问题的思路会更熟悉一点)

1335 工作计划的最低难度(python3 动态规划)

1049题是关于01背包的模型,01背包:在背包容量、物品重量、物品价值确定的情况下,怎么样拿取物品到背包中使得最后背包中物品的价值是最大的,可以使用一维的dp数组解决,dp[j]表示背包容量为j的情况下背包中物品的最大价值,我们可以从尝试将当前的物品放置到容量最大的那个背包到容量为当前物品重量的那个背包,求解出当前的dp[j]的最大值,这样每一次放置物品的时候都可以利用上一次dp[j]的最大价值的信息推导出当前背包dp[j]的信息,这样最后dp数组的最后一个元素的值肯定是最大的

1049 最后一块石头的重量 II(python3 01背包)

1696 跳跃游戏 VI(python3 动态规划、优先队列优化)

差分数组

可以用来求解出关于多个相交的区间上的点出现的频数问题,关于区间上的问题可以多往差分数组、前缀和( 某个区间上的和)、树状数组这些方面思考

1589 所有排列中的最大和(python3 差分数组、排序)

蓝桥杯--算法提高--VIP--分苹果题目(python3 差分数组)

拓扑排序

207 课程表

滑动窗口

1052与1208题使用的模板都是类似的,都是先初始化 l = r = 0,然后滑动右窗口等到题目不满足条件的时候缩小左边的窗口并且在滑动窗口的时候计算出每个窗口的最佳答案,可以对照着理解这两道题目

3 无重复字符的最长子串

76 最小覆盖子串

面试题 17.18. 最短超串

1456 定长子串中元音的最大数目

1423 可获得的最大点数

1438 绝对差不超过限制的最长连续子数组

1248 统计优美子数组(python3)

1208 尽可能使字符串相等(python3 滑动窗口模板)

1052 爱生气的书店老板(python3 滑动窗口模板)

209题是一道经典的滑动窗口思路的题目,这一类问题有一个明显的特点是寻找满足某个条件的长度最小的区间,所以一般滑动窗口能够解决基本上是...长度最小的问题

209 长度最小的子数组(python3 前缀和+二分查找、滑动窗口)

1695 删除子数组的最大得分(python3 滑动窗口、前缀和、字典)

树状数组

1409 查询带键的排列

二分查找

二分查找比较经典的题目:1102/410/774/875/LCP12/1011/1062/1482/1552,这些题目基本上都是可以使用类似的二分查找模板(确定最小边界与最大边界,查找中间值mid-这个中间值mid是有具体的含义的,然后判断mid是否符合题目要求来更新下一次二分查找的范围)

二分查找模型的另外一个特点是求解最小化最大值问题和最大化最小值问题

1283 使结果不超过阈值的最小除数

1351 统计有序矩阵中的负数

1482 制作 m 束花所需的最少天数(python3)

1201 丑数 III(python3)

240 搜索二维矩阵 II(python3 递归、二分查找)

面试题 16.06 最小差(python3 排序 + 二分查找--双指针)

1552 两球之间的磁力(python3 二分查找)

1011 在 D 天内送达包裹的能力(python3 二分查找最小化最大值问题

719 找出第 k 小的距离对(python3)

1631 最小体力消耗路径(python3 dfs + 二分查找优化)

410 分割数组的最大值(python3 二分查找、动态规划)

875 爱吃香蕉的珂珂(python3 二分查找)

LCP 12 小张刷题计划(python3 二分查找)

209题二分查找新思路:只查找满足条件的区间

209 长度最小的子数组(python3 前缀和+二分查找、滑动窗口)

当数据规模比较大而且不能够使用动态规划的思路解决的时候需要往二分查找这方面去思考,一个最简单的方法检验是否能够使用二分查找策略的方法:找出题目中的所有参数然后检验二分查找当前的参数是否可行,假如可行说明二分查找这个参数的方案是可行的,这样最终就可以求解出符合要求的答案,1648就是一道使用二分查找思路比较隐晦的题目,因为这道题目中二分查找的参数不是最终的答案,我们还需要根据二分查找的结果最后计算出最终的答案,所以会多了一个步骤

1648 销售价值减少的颜色球(python3 二分查找)

1665题是一道二分查找比较难想到如何检测mid是否满足题目的条件的题目,可以学习学习

1665 完成所有任务的最少初始能量(python3 二分查找、分析)

LCP 08题是关于二分查找过程中判断多个属性是否同时满足条件的题目,需要多学习一下其中的思路

LCP 08 剧情触发时间(python3 二分查找-二分查找的过程中需要判断多个属性值是否满足题目条件)

162题是根据题目的具体条件进行的二分查找

162 寻找峰值(python3 分析、递归二分查找)

1712 将数组分成三个子数组的方案数(python3 前缀和 + 二分查找:对于数据规模大于等于10 ^ 5的要多想想二分查找)

区间调度

区间调度问题可以尝试题目中的所有参数来确定具体的处理策略

435 无重叠区间(python3 贪心求解最多不相交区间的数目 区间调度问题)

452 用最少数量的箭引爆气球(python3 贪心求解连续相交区间的数目 区间调度问题)

状态压缩

1542 找出最长的超赞子字符串(python3 状态压缩、前缀和 + 哈希思想)

余数分组

通过哈希表将相同余数的数组放在一起,这样可以计算出数组中和为某个数target的所有组合

1497 检查数组对是否可以被 k 整除(python3 使用字典对余数进行分组)

1679 K 和数对的最大数目(python3 使用字典对余数分组、排序 + 双指针)

正(逆)向思维

当发现问题正向解决比较难想或者是比较难处理的时候,但是反过来求解会更容易一点那么我们选择反过来求解(正难则反)

991 坏了的计算器(python3 正向思维与逆向思维、贪心)

排序

1464 数组中两元素的最大乘积

1491 去掉最低工资和最高工资后的工资平均值(python3)

1200 最小绝对差(python3)

1561 你可以获得的最大硬币数目(python3)

1619 删除某些元素后的数组均值(python3 对列表进行排序)

1647 字符频次唯一的最小删除次数(字典统计字符出现的次数 + 排序)

164题是基于桶排序的思想依次计算相邻两个同的最小元素与最大元素的差值来从而计算出相邻元素的最大间距

164 最大间距(python3 枚举、桶排序思想计算相邻元素的最大间距)

1679 K 和数对的最大数目(python3 使用字典对余数分组、排序 + 双指针)

python可以使用lambda表达式自定义排序的规则,多个参数的情况下可以使用括号来规定参数排序的顺序,参数前面添加负号表示按照从大到小进行排序

1710 卡车上的最大单元数(python3 贪心、排序)

539 最小时间差(python3 排序)

日期

1360. 日期之间隔几天

数学

1362. 最接近的因数

1339 分裂二叉树的最大乘积

1276 不浪费原料的汉堡制作方案(python3二元一次方程)

816 模糊坐标(python3笛卡尔乘积)

1232 缀点成线(python3斜率)

1201 丑数 III(python3)

1175. 质数排列(python3排列组合)

96 不同的二叉搜索树(python3 递推(卡塔兰数))

裴蜀定理:ax + by = z 有解当且仅当 z 是 x, y 的最大公约数的倍数

365 水壶问题(python3 广度优先搜索、数学推导-裴蜀定理)

592 分数加减运算(python3 字符串处理、求解最大公约数)

① 相邻两条垂直的边的平行四边形是矩形 ② 对角线的中心相同而顶点到中心的距离相等的四边形是矩形

963 最小面积矩形 II(python3 判断是否四个点能否构成矩形)

1665 完成所有任务的最少初始能量(python3 二分查找、分析、证明不等式)

剑指 Offer 14- I 剪绳子(python3 数学推导)

1325 删除给定值的叶子节点

1268 搜索推荐系统(python3字典树)

1584 连接所有点的最小费用(python3 kruskal 算法最小生成树)

767/1054 题(两道题的本质都是一样的)使用python中的heapq模块创建小根堆(在元素前面添加负号相当于是大根堆),heapq模块在初始化列表,添加与弹出元素的时候都会维持堆的不变性非常方便,heapq模块经常使用的方法:

① 初始化一个堆(通常将一个列表初始化为一个小根堆):heapq.heapify()  ② 弹出堆顶元素:heapq.heappop()  ③ 往堆中添加元素:heapq.heappush()

767 重构字符串(python3 大根堆--贪心)

1054 距离相等的条形码(python3 大根堆--贪心)

1046 最后一块石头的重量(python3 模拟、大根堆)

图论

1334 阈值距离内邻居最少的城市(Dijkstra算法)

1514 概率最大的路径(python3 dfs、bfs)

博弈论

877题是一道关于博弈的问题,对于博弈的问题因为涉及到两个人的分数所以我们可以定义一个相对分数(两者分数之差),这样不管使用记忆型的递归还是动态规划都可以很好计算两者分数的差距最终判断这个相对分数大于0来判断是谁赢得比赛

877 石子游戏(python3 记忆型递归、动态规划、博弈)

字符串

205 同构字符串

1404 将二进制表示减到 1 的步骤数

1233 删除子文件夹(python3字符串排序,startswith判断是否是前缀)

1156 单字符重复子串的最大长度(python3)

1576 替换所有的问号(python3)

1616 分割两个字符串得到回文串(python3)

592题使用python中的re模块分割字符串

592 分数加减运算(python3 字符串处理、求解最大公约数)

767 重构字符串(python3 大根堆--贪心)

并查集

1319 连通网络的操作次数

1202 交换字符串中的元素(python3)

1584 连接所有点的最小费用(python3 kruskal 算法最小生成树)

格雷码

1238 循环码排列(python3)

前缀和

经常结合哈希表进行优化,1546/1658题都是经典的前缀和 + 哈希优化的问题

可以解决某个区间和的问题,一般涉及到区间和都可以考虑前缀和的思路,并且前缀和在很多时候都是结合哈希表一起从而达到优化的目的,1524题的图非常清楚了表达了两者结合求解的过程

1171 从链表中删去总和值为零的连续节点(python3 前缀和 :区间问题)

1588 所有奇数长度子数组的和(python3 前缀和、组合:区间问题)

下面1546 是一道比较经典的题目,使用了哈希表对其进行了优化,这样省略了之前计算先遍历一遍数组计算所有位置的前缀和的操作,使用哈希表(字典)检查是否存在和为target的区间,我们在遇到有关区间求和的问题首先需要想到的是前缀和的思路然后再考虑是否可以使用哈希表(字典)进行优化

1546 和为目标值的最大数目不重叠非空子数组数目(python3 前缀和 + 字典优化)

下面1524题是关于计算[0,i]的区间前缀和为奇数还是偶数 + [0, i - 1]前缀和为奇数与偶数的数目计算出区间和为奇数的数目(区间和问题) 公式:和为偶数区间 + 和为奇数区间 = 和为奇数区间 ,和为奇数区间 + 和为奇数区间 = 和为奇数区间 

1524 和为奇数的子数组数目(python3)

209 长度最小的子数组(python3 前缀和+二分查找、滑动窗口:区间和为某个值s)

在前缀和的题目中,经常会使用到与字典(哈希表)一起检查是否存在和为x的区间,两者结合起来可以降低匹配前缀和的时间复杂度,其中1546/1658题使用的都是前缀和 + 字典的方式来寻找某一个区间和等于目标值x的方法

1658 将 x 减到 0 的最小操作数(python3 字典、前缀和计算某一个区间的和)

1542题是一道经典的前缀和 + 哈希(字典)思想的题目

1542 找出最长的超赞子字符串(python3 状态压缩、前缀和 + 哈希思想)

1685 有序数组中差绝对值之和(python3 前缀和)

1712题前缀和 + 二分查找划分三个区间

1712 将数组分成三个子数组的方案数(python3 前缀和 + 二分查找)

1695 删除子数组的最大得分(python3 滑动窗口、前缀和计算某个区间的值、字典)

位运算

可以使用(num - 1) & num == 0来判断当前的数字nums是否是2的整数次幂,因为当num为2的整数次幂的时候与前一个数字恰好是互为取反的关系,例如数字3与数字4对应的二进制数字为011与100所以经过与运算之后得到的结果肯定是0

477 汉明距离总和(python3 位运算)

868 二进制间距(python3 模拟、位运算)

693 交替位二进制数(python3 位运算)

1386题使用二进制的0与1表示两种不同的情况,1 << n可以将第n位二进制位置为1,第n为是从低位开始算起的(也即1 << n可以得到二进制数字100...0,1后面有n个0),或运算可以保持原有数字的基础上将某些二进制位置为1

1386 安排电影院座位(python3 字典、位运算)

1542题使用到了异或运算计算字符出现的次数是偶数次数还是奇数次数,使用1 << n得到第n位的二进制为1的数字

1542 找出最长的超赞子字符串(python3 状态压缩、前缀和 + 哈希思想)

1680使用的就是(num - 1) & num来判断num是否是2的整数次幂,通过在循环判断当前的num是否是2的整数次幂来计算当前数字num的二进制位数,通过x = x << (len2(num)) + num这个公式来连接1~num的二进制数字对应的十进制数字的结果

1680 连接连续二进制数字(python3 位运算、分析)

python3

python3基础练习100题(根据常见问题来练习python3中的api)

菜鸟教程中的python中的内置函数用法

numpy

numpy常见方法(官方文档)

python数据结构

感觉python提供的几个基本的数据结构都是很方便的,比如字符串(str)、元组(tuple)、列表(list)、字典(dict)、集合(set)、我们在编写程序的时候可以利用这些数据结构来帮助我们存储某些变量,并且在某些情况下能够解决其他语言数据结构存储和表达比较困难的问题(比如java表达符合的数据结构类型的时候就会有点困难),例如python中列表 + 元组可以将多个复合的数据类型映射到一个值中,类似于二元函数,利用列表 + 元组我们可以存储二维平面上的坐标,字典其实也可以完成类似的映射功能,列表的话就类似于动态的数组非常方便动态增加与删除元素

python进制转换 

你可能感兴趣的:(博文链接,1024程序员节)