LeetCode
文章平均质量分 69
LittleFish0820
江南可采莲,莲叶何田田,鱼戏莲叶间。
展开
-
【手撕】0-1、完全、多重、二维0-1背包
文章目录0-1背包(拿和不拿的问题)二维状态转移方程滚动数组优化完整代码完全背包二维状态转移方程滚动数组优化完整代码多重背包三重循环二进制优化(缺)二维费用背包题目dp数组含义完整代码0-1背包(拿和不拿的问题)问题背景:背包承重MMM公斤,NNN件物品,第iii个物品重wiw_iwi,值cic_ici,求背包能装的最大价值。二维状态转移方程dp[i][j] 前i件物品装进容量为j的背包,能装的最大价值。if (j < w[i]) // 第i件物品装不下呀 dp[i][j] =原创 2022-05-13 16:38:58 · 112 阅读 · 0 评论 -
【手撕】快排、堆排与归并排
文章目录1. 快速排序2. 堆排序3. 归并排序关于稳定排序1. 快速排序随机数双指针class Solution {public: int partition(vector<int>& nums, int left, int right) { int Select = rand() % (right - left + 1) + left; swap(nums[Select], nums[right]); int sl原创 2022-05-05 22:07:07 · 157 阅读 · 0 评论 -
【水塘抽样】最基础介绍+最简单模板
文章目录问题1:1~n随机选1个数问题2:1~n随机选k个数LeetCode习题集382.链表随机节点398.随机数索引497.非重叠矩形中的随机点错误解法正确解法519.随机翻转矩阵超时改进蓄水池抽样是一系列的随机算法,其目的在于从包含nnn个项目的集合SSS中选取kkk个样本,其中nnn为一很大或未知的数量,尤其适用于不能把所有nnn个项目都存放到内存的情况。问题1:1~n随机选1个数nP(i|n=1)P(i|n=2)P(i|n=3)P(i|n)111×(1−12)=原创 2022-04-12 10:38:25 · 578 阅读 · 0 评论 -
蓝桥杯备赛(十二)— 深度优先搜索DFS
递归递归三要素确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件确定单层递归的逻辑二叉树递归题集(估计不考二叉树)337. 打家劫舍 III124.二叉树中的最大路径和(困难)112.路径总和113.路径总和II回溯请认识这一点:回溯是一种暴力搜索的算法如何把回溯化虚为实(写出代码):画树形图,理解树的宽度和深度如何终止回溯:需要终止条件回溯三要原创 2022-04-07 13:14:54 · 374 阅读 · 0 评论 -
蓝桥杯备赛(十一)— 组合数学、GCD、素数筛
只剩三天了,只能弄些简单的知识。一想到300元我就心痛。文章目录组合数学排列数的计算组合数的计算1. 直接计算2. 递推计算二项式定理gcd素数筛例:20以内素数筛组合数学排列数的计算Ank=n!(n−k)!=n(n−1)⋯(n−k+1)A_n^k=\frac{n!}{(n-k)!} = n (n - 1)\cdots (n - k + 1)Ank=(n−k)!n!=n(n−1)⋯(n−k+1)k = 3n = 5ans = 1for i in range(n, n - k, -1原创 2022-04-06 12:41:56 · 573 阅读 · 0 评论 -
蓝桥杯备赛(十)— 快速幂
文章目录概念快速幂取模50.Pow(x, n)递归迭代372.超级次方方法一:倒序方法二:正序遍历(秦九韶算法)能学一点是一点,也许300块真的能回来呢?ε=(´ο`*)))唉概念目的:当nnn很大时,高效的算出ana^nan普通算法时间复杂度O(n)O(n)O(n)ans = 1for i in range(n): ans = ans * a快速幂时间复杂度O(log2n)O(\log_2 n)O(log2n)101=64+32+4+1=(1100101)2101 =原创 2022-04-05 16:47:27 · 470 阅读 · 0 评论 -
蓝桥杯备赛(九)— 输入输出调试
文章目录输入格式1. 一行一个变量2. 一行确定个变量3. 一行未知个变量4. 二维数组的输入5. 未明确说明终止的输入输出格式1. 四舍五入保留两位小数2. 仅保留两位小数,无需四舍五入3. 百分比格式输出IDLE调试方法1. 在`.py`文件中,设置断点(清除断点)。2. 打开调式界面3. 运行`.py`文件4. 一些名词解释输入格式1. 一行一个变量n = int(input())2. 一行确定个变量a, b, c = map(int, input().split())3. 一行未知个原创 2022-04-05 12:44:31 · 473 阅读 · 0 评论 -
蓝桥杯备赛(八)— 字典树
文章目录实现Trie类例子1. 初始化2. 插入字符串3. 查找前缀4. 查找单词复杂度前缀树是一种树形结构数据,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用场景,例如自动补完和拼写检查。实现Trie类Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串word。boolean search(String word) 如果字符串word在前缀树中,返回true (即,在检索之前已经插入);否则,返回false。boolea原创 2022-04-05 09:41:32 · 238 阅读 · 0 评论 -
蓝桥杯备赛(七)— 拓扑排序
文章目录基本操作例子实现基本操作适用情况:DAG寻找图中任何一个没有先行者的节点输出此顶点,并将此顶点的所有边删除重复上面两个步骤处理所有的顶点方法:BFS例子#mermaid-svg-C6hyWAUV5hHYMcXK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-C6hyWAUV5hHYMcXK .error-icon{fill:#552222;}原创 2022-04-04 14:51:46 · 97 阅读 · 0 评论 -
蓝桥杯备赛(六)— KMP
文章目录前缀表(prefix table) & next数组模式匹配时间复杂度扩展 KMP最近吃不好睡不好,心情低落300块大概率打水漂了,但还是坚持下吧KMP是解决模式匹配问题的算法KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。aabaaf-10-101-1012345678aabaabaafaabaaf(匹原创 2022-04-04 13:59:13 · 586 阅读 · 0 评论 -
蓝桥杯备赛(五)— 树状数组
抱佛脚Day05文章目录BIT的结构BIT的求和BIT的值的更新BIT的复杂度BIT的实现树状数组(Binary Indexed Tree, BIT)是能够完成下述操作的数据结构。给一个初始值全为0的数列a1,a2,⋯ ,aia_1, a_2,\cdots,a_ia1,a2,⋯,ai给定iii,计算a1+a2+⋯+aia_1+a_2+\cdots+a_ia1+a2+⋯+ai给定iii和xxx,计算ai=ai+xa_i = a_i + xai=ai+xBIT的结构BIT使用数原创 2022-03-29 07:07:45 · 286 阅读 · 0 评论 -
蓝桥杯备赛(四)— 线段树
抱佛脚Day04文章目录1.线段树的概念2.基于线段树的RMQ(Range Minimum Query)的结构基于线段树的RMQ的查询基于线段树的RMQ的更新基于线段树的RMQ的复杂度基于线段树的RMQ的实现307.区域和检索-数组可修改1.线段树的概念线段树是擅长处理区间的,形如下图的数据结构。线段树是一棵Perfect Binaiy Tree(所有的叶子的深度都相同,并且每个节点要么是叶子要么有2个儿子的树 ),树上的每个节点都维护一个区间。根维护的是整个区间,每个节点维护的是父亲的区间二等分后的原创 2022-03-28 13:54:09 · 642 阅读 · 0 评论 -
蓝桥杯备赛(三)— 最短路
抱佛脚文章目录1.单源最短路问题 (Bellman-Ford算法)例一例二2.单源最短路问题 (Dijkstra算法)写法一:枚举所有的顶点来查找下一个使用的顶点写法二:堆3.任意两点间的最短路问题(Floyd-Warshall算法)4.路径还原最短路问题是图论中最基础的问题,在程序设计竞赛试题中也经常出现。最短路是给定两个顶点,在以这两个点为起点和终点的路径中,边的权值和最小的路径。如果把权值当作距离,考虑最短距离的话就很容易理解了。智力游戏中的求解最少步数问题也可以说是一种最短路问题。1.单源最短原创 2022-03-27 18:52:23 · 1286 阅读 · 0 评论 -
蓝桥杯备赛(二)— 最小生成树(Kruskal)
文章目录基本知识训练题1584.连接所有点的最小费用修建公路临时磨枪Day02基本知识Kruskal算法按照边的权值的顺序从小到大査看一遍,如果不产生圈(重边等也算在内),就把当前这条边加人到生成树中。接下来我们介绍如何判断是否产生圈。假设现在要把连接顶点u和顶点v的边e加入生成树中。如果加入之前u和v不在同一个连通分量里,那么加入e不会产生圈。反之,如果u和v在同一个连通分量里,那么一定会产生圈。可以使用并查集高效地判断是否属于同一个连通分量。Kruskal算法在边的排序上最费时,算法的复杂度原创 2022-03-26 14:39:43 · 624 阅读 · 0 评论 -
蓝桥杯备赛(一)—— 并查集模板
第一次参加蓝桥杯,也是最后一次了。我是个小白,准备几个模板到时候坐牢也不会那么难受吧。文章目录1、并查集的用途2、并查集的结构(1) 初始化(2) 合并(3) 查询3、并查集实现中的注意点4、并查集的复杂度5、并查集的实现LeetCode并查集题1、并查集的用途查询元素a和元素b是否属于同一组合并元素a和元素b所在的组2、并查集的结构每个元素对应一个节点,每个组对应一棵树。在并査集中,哪个节点是哪个节点的父亲以及树的形状等信息无需多加关注,整体组成一个树形结构才是重要的。(1) 初始原创 2022-03-25 23:38:06 · 920 阅读 · 0 评论 -
学算法,认识算法。
文章目录时间复杂度常用算法简介分治法(Divide and Conquer)递归算法贪心法(Greed Method)动态规划法(Dynamic Programming Algorithm)迭代法(Iterative Method)枚举法回溯法(Backtracking)课后习题云运算(Cloud Computing)云运算是指将网络中运算能力提供出来作为一种服务,只要用户可以通过网络登录远程服务器进行操作,就能使用这种运算资源。物联网(Internet of Things,IOT)物联网是原创 2022-01-05 12:48:55 · 193 阅读 · 0 评论 -
【269】滑动窗口_贪心_无向图_广度优先搜索
文章目录2089.找出数组排序后的目标下标方法一:排序+遍历方法二:一次遍历2090.半径为k的子数组平均值2091.从数组中移除最大值和最小值2092.找出知晓秘密的所有专家2089.找出数组排序后的目标下标方法一:排序+遍历class Solution(object): def targetIndices(self, nums, target): ans = [] nums.sort() for i, w in enumerate(nums)原创 2022-01-01 21:59:57 · 194 阅读 · 0 评论 -
【268周赛】贪心_模拟_哈希_二分_枚举
文章目录2078.两栋颜色不同且距离最远的房子我的方法常见解法2079.给植物浇水2080.区间内查询数字的频率2081.k镜像数字的和方法一:打表表方法二:折半搜索2078.两栋颜色不同且距离最远的房子我的方法递归 超时class Solution(object): def maxDistance(self, colors): left = 0 right = len(colors) - 1 if left >= right:原创 2021-12-30 20:02:21 · 333 阅读 · 0 评论 -
【拒绝暴力】双指针_计数排序+前缀和_二分法
文章目录825.适龄的朋友BF算法方法一:双指针方法二:计数排序+前缀和1283.使结果不超过阈值的最小除数1656.设计有序流825.适龄的朋友BF算法class Solution(object): def numFriendRequests(self, ages): def fit(x, y): if (y <= 0.5 * x + 7) or (y > x) or (y > 100 and x < 100):原创 2021-12-27 18:54:44 · 703 阅读 · 0 评论 -
【68/273】暴力_贪心_模拟_前后缀和
文章目录第68双周赛5946.句子中的最多单词数5947.从给定原材料中找到所有可以做出的菜5948.判断一个括号字符串是否有效第273周赛5963.反转两次的数字5964.执行所有后缀指令5965.相同元素的间隔之和第68双周赛5946.句子中的最多单词数class Solution(object): def mostWordsFound(self, sentences): ans = 0 for sentence in sentences:原创 2021-12-26 15:18:46 · 209 阅读 · 0 评论 -
【贪心+优先队列】吃苹果的最大数目
1705.吃苹果的最大数目小时候,妈妈经常买超市快过期的买一送一的酸奶,然后每天都会挑最先过期的那瓶督促我喝下去。这种思想就是一种贪心思想。但我妈不会买太多(买多了喝不完呀),因此每次挑选最先过期的酸奶用的方法都是用眼睛扫描一遍生产日期,时间复杂度是O(n)O(n)O(n)。如果 nnn 很大而持续时间又很长,线性扫描的方法显然就不再适用了。堆,一次操作的时间复杂度为O(logn)O(\log n)O(logn)用堆存储每个苹果的腐烂日期,则小顶堆的堆顶就是最早的腐烂日期。堆的每一个元素也原创 2021-12-24 22:42:38 · 405 阅读 · 0 评论 -
267周赛_队列_链表_模拟_并查集
买票需要的时间暴力模拟class Solution(object): def timeRequiredToBuy(self, tickets, k): n, ans = len(tickets), 0 while tickets[k] != 0: for i in range(n): if tickets[i] > 0: tickets[i] -= 1 ans +=原创 2021-12-20 17:48:53 · 498 阅读 · 0 评论 -
并查集_省份数量_好友限制 21.12.17
并查集三要素Initializefindunion2076.处理含限制条件的好友请求class Solution(object): def friendRequests(self, n, restrictions, requests): def initialize(n): return list(range(n)) def find(x): if parent[x] == x:原创 2021-12-17 15:18:10 · 107 阅读 · 0 评论 -
极坐标_二分查找_滑动窗口 21.12.16
1610.可见点的最大数目前情提要1. atan2import math# 第一象限point = [1, 1] print(math.atan(point[1] / point[0]) / math.pi * 180) # 45print(math.atan2(point[1], point[0]) / math.pi * 180) # 45# 第二象限point = [-1, 1]print(math.atan(point[1] / point[0]) / math.pi原创 2021-12-16 10:47:39 · 648 阅读 · 0 评论 -
DAG_DFS_拓扑排序 闷声发大财 21.12.15
文章目录851.喧闹和富有暴力BFS超时DFS拓扑排序851.喧闹和富有暴力BFS超时class Solution(object): def loudAndRich(self, richer, quiet): # DAG edges = defaultdict(list) for r in richer: edges[r[1]].append(r[0]) num = len(quiet) a原创 2021-12-15 17:57:50 · 1163 阅读 · 0 评论 -
Greedy_课程表III 21.12.14
630.课程表III先放上我写的class Solution(object): def scheduleCourse(self, courses): courses.sort(key = lambda x : (x[1], x[0])) ans, now = 0, 0 for course in courses: if now + course[0] <= course[1]: now原创 2021-12-14 13:59:33 · 362 阅读 · 0 评论 -
67双周赛_前缀和_BFS_有向图_二分法插入
文章目录5934.找到和最大的长度为K的子序列5935.适合打劫银行的日子暴力超时前缀和+后缀和5936.引爆最多的炸弹5937.序列顺序查询无意义超时二分法insert5934.找到和最大的长度为K的子序列这题还是有点绕的,考sort,key,lambda用法class Solution(object): def maxSubsequence(self, nums, k): index_value = [(i, nums[i]) for i in range(len(nums原创 2021-12-13 18:52:30 · 392 阅读 · 0 评论 -
271周赛前3题 21.12.12
5952.环和杆暴力记录# 5952. 环和杆import collectionsclass Solution(object): def countPoints(self, rings): p = collections.defaultdict(list) for i in range(10): p[str(i)] = [0] * 3 for i in range(0, len(rings), 2):原创 2021-12-12 13:22:30 · 92 阅读 · 0 评论 -
回溯_Sudoku 21.12.11
37.解数独class Solution(object): def solveSudoku(self, board): """ :type board: List[List[str]] :rtype: None Do not return anything, modify board in-place instead. """ def isValid(row, col, num): # 先判断再原创 2021-12-11 11:57:43 · 446 阅读 · 0 评论 -
回溯_单词搜索_八皇后 21.12.10
回溯 Day02查找单词问题79.单词搜索先写程序框架,再慢慢补充具体内容class Solution(object): def exist(self, board, word): def helper(): 边界条件 if 第一个字母相等 上下左右helper() for 行遍历 for 列遍历 if 找到了: return True retu原创 2021-12-10 19:03:06 · 571 阅读 · 0 评论 -
DP_三个无重叠子数组的最大和 21.12.08
689.三个无重叠子数组的最大和滑动窗口:单个子数组的最大和def maxSumOfOneSubarray(nums, k): ans = [] sum1, maxsum1 = 0, 0 for i, num in enumerate(nums): sum1 += num if i >= k - 1: # 当滑动后得到的新sum1超越maxsum1时,记录历史新高和新索引 if sum1 >原创 2021-12-08 10:56:08 · 107 阅读 · 0 评论 -
DFS 边界着色 21.12.07
1034.边界着色class Solution(object): def colorBorder(self, grid, row, col, color): """ :type grid: List[List[int]] :type row: int :type col: int :type color: int :rtype: List[List[int]] """ d原创 2021-12-07 11:20:36 · 305 阅读 · 0 评论 -
BFS 21.12.05
寻找制高点制高点是可以一直向下达到东西南北四个方向的点在向下走的过程中不能爬坡逆向思维以边缘作为起点向内部开始遍历搜索,看下一个节点的高度是否高于或等于自身的高度标记从四个边缘出发可以到达的点,最终四者取交集得到的点,就是要寻找的制高点约定 左上角为(0,0)(0,0)(0,0),右下角为(m−1,n−1)(m-1,n-1)(m−1,n−1)import collectionsdef bfs(pointSet, rows, cols, matrix): # 方向 # 向右原创 2021-12-05 20:13:58 · 104 阅读 · 0 评论 -
Tree_BFS 21.12.04
文章目录226.翻转二叉树方法一:DFS方法二:BFS树的右侧513.找树左下角的值199.二叉树的右视图116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II226.翻转二叉树方法一:DFS递归的翻转左右子树class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode ""原创 2021-12-04 10:24:15 · 123 阅读 · 0 评论 -
Tree_BFS_DFS 21.12.03
文章目录100.相同的树方法一:DFS方法二:BFS101.对称二叉树方法一:DFS方法二:BFS104.二叉树的最大深度方法一:DFS方法二:BFS111.二叉树的最小深度方法一:DFS方法二:BFS100.相同的树方法一:DFS需不需要辅助函数?因为递归的返回值和最终的返回值都是bool值,所以不需要辅助函数基线条件:当两个都是None时返回True,有一个None而另一个不是None则返回False递归的时候顺便判断节点的值是否相等# Definition for a binary tre原创 2021-12-03 09:12:54 · 984 阅读 · 0 评论 -
BFS_秘密_defaultdict_deque_set 21.12.02
2092. 找出知晓秘密的所有专家定义一个0,1数组,长度为总专家个数,0表示知道秘密,1表示不晓得秘密还要对时间排序,对同一时间的会议class Solution(object): def findAllPeople(self, n, meetings, firstPerson): # 开始专家0和专家firstPerson知晓秘密 secret = [0] * n secret[0] = secret[firstPerson] = 1原创 2021-12-02 18:49:02 · 494 阅读 · 0 评论 -
BFS 选课 21.12.01
选课的智慧def bfs(numCourses, preList): # numCourses 课程数量 # preList preList[i][j] 课程i是课程j的先修课 # 第一步 计算先修课数量 preListCount = [0] * numCourses for r in range(numCourses): for c in range(numCourses): if preList[r][c] == 1:原创 2021-12-01 19:04:18 · 592 阅读 · 0 评论 -
DFS 之岛屿问题 21.11.30
文章目录最大的岛屿200.岛屿数量1905.统计子岛屿1254.统计封闭岛屿的数目最大的岛屿695. 岛屿的最大面积模拟人丈量岛屿从左上忘右下遍历,确定登陆岛屿后,按左右上下丈量岛屿面积,丈量过的记为2,同时记录最大岛屿面积class Solution(object): def maxAreaOfIsland(self, grid): """ :type grid: List[List[int]] :rtype: int ""原创 2021-11-30 21:11:02 · 318 阅读 · 0 评论 -
DFS Exercise01 21.11.29
二叉树的节点代码class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = NoneA = TreeNode(3)B = TreeNode(2)C = TreeNode(1)A.left = BA.right = CA.right.val # 1怎么抓住小偷337. 打家劫舍 III解题思路 对二叉树分层,每一原创 2021-11-29 16:12:11 · 396 阅读 · 0 评论 -
LeetCode第269场周赛 错题分析
第269周赛文章目录第269周赛5938.找出数组排序后的目标下标5939.半径为k的子数组平均值5940.从数组中移除最大值和最小值5941.找出知晓秘密的所有专家题目很简单,只ac了3道,第4道差一点点。我还是太菜了,会继续努力训练思路和速度的。5938.找出数组排序后的目标下标class Solution(object): def targetIndices(self, nums, target): """ :type nums: List[int]原创 2021-11-28 13:57:10 · 175 阅读 · 0 评论