- 博客(41)
- 收藏
- 关注
原创 Day 42 动态规划part04 : 01背包问题,你该了解这些! 01背包问题,你该了解这些! 滚动数组 416. 分割等和子集
动态规划(Dynamic Programming,简称 DP)是解决优化问题的一种常用策略,其中“背包问题”是动态规划中最经典的问题之一。
2023-09-05 15:19:37
580
原创 Day 39 动态规划part02 : 62.不同路径 63. 不同路径 II
机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。网格的左上角 (起始点在下图中标记为 “Start” )。网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。3x3 网格的正中间有一个障碍物。
2023-09-04 17:44:32
512
原创 Day 38 动态规划part01 : 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。debug方法: 打印dp数组。的,对于刷题来说就够用了。表示)形成的序列称为。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2023-09-04 15:26:33
166
原创 Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油。开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。
2023-09-04 10:06:48
915
原创 Day 36 贪心算法 part05 : 435. 无重叠区间 763.划分字母区间 56. 合并区间
区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。
2023-09-04 10:05:58
1189
原创 Day 32 贪心算法 part02 : 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。
2023-09-01 11:24:08
91
原创 Day 31 贪心算法 part01 : 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。本篇给出了什么是贪心以及大家关心的贪心算法固定套路。
2023-08-30 19:15:01
278
原创 Day 30 回溯算法part06 : 332.重新安排行程 51. N皇后 37. 解数独 总结
所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。
2023-08-30 18:50:13
96
原创 Day 29 回溯算法part05 : * 491.递增子序列* 46.全排列* 47.全排列 II
给定一个可包含重复数字的序列。给定一个不含重复数字的数组。返回所有不重复的全排列。
2023-08-29 17:04:43
66
原创 Day 28 回溯算法part04 : 93.复原IP地址 78.子集 90.子集II
其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。返回该数组所有可能的子集(幂集)。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。,这些地址可以通过在。
2023-08-24 16:50:34
72
原创 Day 27 回溯算法part03 : 39. 组合总和 40.组合总和II 131.分割回文串
2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。如果至少一个数字的被选数量不同,则两种组合是不同的。中的每个数字在每个组合中只能使用。7 也是一个候选, 7 = 7。是正着读和反着读都一样的字符串。,并以列表形式返回。分割成一些子串,使每个子串都是。中可以使数字和为目标数。对于给定的输入,保证和为。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。所有可能的分割方案。
2023-08-22 23:25:02
67
原创 Day 25 回溯算法part02 : 216.组合总和III 17.电话号码的字母组合
找出所有相加之和为n的k返回所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。= 3,= 7[[1,2,4]]没有其他符合的组合了。= 3,= 9没有其他符合的组合了。[]不存在有效的组合。在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。
2023-08-17 20:53:11
73
原创 Day 24 回溯算法part01 : 理论基础 77. 组合
回溯是一种通过穷举所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解的话(或至少不是最后一个解),回溯算法会通过在上一步进行一些变化来消除该候选解,然后重新尝试。
2023-08-17 18:51:10
122
原创 Day 23 二叉树part09: 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇
二叉树是一种特殊的树,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。
2023-08-16 17:15:14
45
原创 Day 22 二叉树part08: 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。, 因为根据定义最近公共祖先节点可以为节点本身。
2023-08-15 21:00:27
35
原创 Day 21 二叉树part07: 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。因为根据定义最近公共祖先节点可以为节点本身。的最近公共祖先是节点。的最近公共祖先是节点。
2023-08-15 20:23:32
134
原创 Day 19 二叉树part06: 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
我们为每个节点跟踪一个上界和下界,确保每个节点的值在这些边界内。根节点的值是 5 ,但是右子节点的值是 4。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。
2023-08-15 19:24:33
36
原创 Day 18 二叉树part05: 513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。的路径,这条路径上所有节点值相加等于目标和。是同一棵树的后序遍历,请你构造并返回这颗。等于目标和的根节点到叶节点路径如上图所示。路径总和等于给定目标和的路径。(1 --> 2): 和为 3。(1 --> 3): 和为 4。,请构造二叉树并返回其根节点。和一个表示目标和的整数。是指没有子节点的节点。是指没有子节点的节点。是二叉树的中序遍历,
2023-08-14 21:08:04
86
原创 Day 17 二叉树part04: 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和
(赋值表达式,海象操作符)主要是为了避免多次调用相同的函数或重复的计算,从而使代码更简洁。如果你认为普通的方式(如你所示的代码)更容易阅读和理解,完全可以这样写。总之,这段代码的核心思想是:在计算树的高度的过程中,如果发现某个子树的左右子树高度差大于 1,立即返回。函数是主要的接口,它会返回 True 或 False,表示树是否平衡。给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。函数是一个递归函数,用于计算二叉树的高度。的左右两个子树的高度差的绝对值不超过 1。
2023-08-14 18:18:13
74
原创 Day 16 二叉树part03: 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。然而,递归可以提供更简洁,更容易理解的代码,尤其是对于一些复杂的问题,如树或图的遍历。递归的优点在于代码通常更为简洁,逻辑更清晰,更容易理解,而迭代的优点在于它通常效率更高,占用资源更少。存储:在递归中,系统必须维护所有递归调用的堆栈,这需要更多的内存。递归和迭代是编程中两种基本的控制结构,都是为了重复执行某段代码,但是它们之间存在一些基本的区别。,求出该树的节点个数。
2023-08-07 21:54:36
44
原创 Day 16 二叉树part03: 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。然而,递归可以提供更简洁,更容易理解的代码,尤其是对于一些复杂的问题,如树或图的遍历。递归的优点在于代码通常更为简洁,逻辑更清晰,更容易理解,而迭代的优点在于它通常效率更高,占用资源更少。存储:在递归中,系统必须维护所有递归调用的堆栈,这需要更多的内存。递归和迭代是编程中两种基本的控制结构,都是为了重复执行某段代码,但是它们之间存在一些基本的区别。,求出该树的节点个数。
2023-08-07 21:52:38
24
原创 Day 15 二叉树part02:层序遍历 10 226.翻转二叉树 101.对称二叉树 2
给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为。是指从根节点到最远叶子节点的最长路径上的节点数。
2023-08-07 20:44:50
80
原创 Day 14 二叉树part01:理论基础 递归遍历 迭代遍历 统一迭代
以上是二叉树最基本的一些概念和常用操作,但是不同公司可能会有不同的面试重点,因此,你应当根据具体的面试要求进行准备。在准备过程中,不仅要理解这些概念和操作,还要通过实际编码来提升自己的实践能力。
2023-08-01 17:18:52
125
1
原创 Day 11 栈与队列part02:20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。
2023-07-31 21:13:54
83
1
原创 Day 10 栈与队列part01:理论基础 232.用栈实现队列 225. 用队列实现栈
在 Python 中,可以使用 list 来模拟队列,list 的 append 方法对应队列的 push 操作,list 的 pop(0) 方法对应队列的 pop 操作。此外,Python 还提供了优先队列(Priority Queue)的实现,即 heapq 模块,其元素的出队顺序依赖元素的优先级。时,将新的元素插入到队列的前端,然后将队列的其余部分按顺序添加到新元素后面,这样新元素就位于队列的尾部,可以被优先移除。使用两个队列来实现栈。创建的变量是实例变量,也称为属性,它们是绑定到类的实例上的。
2023-07-31 17:01:22
68
1
原创 Day 9 字符串part02:28. 实现 strStr() 459.重复的子字符串 字符串总结 双指针回顾
KMP 算法通过使用一个叫做“部分匹配表”(partial match table,又叫做"失效函数"或"next 数组")的结构,记录了模式串中前后缀的最长公共元素长度,从而实现当匹配失败时,模式串向右移动的位数。在上面的例子中,当我们比对到"ABCDAB "与 "ABCDABD"的最后一个字符时发现不匹配,我们可以直接将模式串向右移动6位(也就是 "ABCDAB"的长度减1),然后开始比对"ABCDABD"与 "ABCDABD"。基于朴素的字符串匹配算法,当出现字符比对不匹配时,我们需要重新开始比对。
2023-07-27 21:13:52
133
1
原创 Day 8 字符串part01:344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。编写一个函数,其作用是将输入的字符串反转过来。
2023-07-26 17:57:21
63
1
原创 Day 7 哈希表part02:454.四数相加II,383. 赎金信,15. 三数之和, 18. 四数之和
依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。一个简单的解法是将它转化为两数相加问题。输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
2023-07-25 16:39:45
39
原创 Day 6 哈希表part01:242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快乐数, 1. 两数之和
虽然std::set、std::multiset 的底层实现是红黑树,不是哈希表,std::set、std::multiset 使用红黑树来索引和存储,不过给我们的使用方式,还是哈希法的使用方式,即key和value。std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。输出结果中的每个元素一定是 唯一 的。
2023-07-03 14:43:14
1265
1
原创 Day 4 链表: 24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点, 面试题 02.07. 链表相交 ,142.环形链表II
表示的是移动first指针的位置。如果写,则表示的是更改链表结构,这会跳过first指针的下一个节点,改变链表本身的结构。因此我区分清楚:仅仅需要,需要。2.和都是判断条件,两者有不同的含义。:判断的是first指针是否存在。只要first指针指向的节点(包括最后的None)存在,循环就会继续。:判断的是first指针的下一个节点是否存在。只有当first指针的下一个节点存在,循环才会继续。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。
2023-07-03 11:40:30
1294
1
原创 Day 3 链表: 203.移除链表元素, 707.设计链表, 206.反转链表
删除,直接让前一个节点的指向下一个节点即可,即curr.next = curr.next.next。在插入完成后,新节点会成为链表的第一个节点。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回。,应该让头节点往下移一个,让下一个节点作为新的头节点,即 head = head.next。
2023-07-02 10:37:50
1818
1
原创 Day 2 数组: 977. 有序数组的平方, 209. 长度最小的子数组, 59. 螺旋矩阵 II
如果nums[i] * nums[i]最大,即nums[i] * nums[i] > nums[j] * nums[j], 则 i ++, k --;如果nums[j] * nums[j]最大,即nums[i] * nums[i] < nums[j] * nums[j], 则 j --, k --。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]解释:平方后,数组变为 [16,1,0,9,100]
2023-06-29 12:48:05
2260
1
原创 Day 1 数组理论基础 : 704. 二分查找, 35.搜索插入位置, 34. 在排序数组中查找元素的第一个和最后一个位置, 27. 移除元素,
题目:给定一个 n 个元素整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1numsn。
2023-06-28 17:43:07
2121
1
原创 【python】猫眼爬虫Top100电影信息
最近做了猫眼爬虫和数据分析,收获很多,记录在此。爬虫和数据分析是两个模块,可以参考目录:目录一、猫眼爬虫1. 猫眼爬虫第一步——找到我们需要的数据2. 猫眼爬虫第二步——获取数据3. 猫眼爬虫第三步——解析数据4. 猫眼爬虫第四步——存储文件数据分析是第二块,以后有空了再更新。一、猫眼爬虫1. 猫眼爬虫第一步——找到我们需要的数据打开网站猫眼验证中心:https://www.maoyan.com/board/4, 就是我们想要.
2021-11-23 10:37:30
4991
4
原创 [解决]Jupyter notebook 无法访问此网站localhost拒绝了我们的连接请求
问题描述:每次打开jupyter notebook的时候,想要自己写项目或者查看已有项目时,都无法编译运行,刷新jupyter notebook目录页后,页面会变成如下图:报错如下:解决思路:首先要先知道本机ip是多少。查询方法:win+R输入cmd,打开在命令提示符,在里面输入ipconfig/all即可查询本机电脑的详细配置,如图:然后复制此IP,在anaconda里的environment中选中我们需要的环境,鼠标左键点击小三角,可以选择Open Termi..
2021-10-08 10:24:15
14878
10
原创 MySQL学习笔记(三)查询
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q提取码:7pr8复制这段内容后打开百度网盘手机App,操作更方便哦6.2查(SELECT)的操作 (重点)增删改都会改变表,但是查询不会。接下来我们将讲解查询(SELECT)操作。关于查询操作的讲解全部将基于...
2021-07-20 15:49:01
1113
原创 MySQL学习笔记(二)增删改
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q提取码:7pr8复制这段内容后打开百度网盘手机App,操作更方便哦目录增(INSERT)、删(DELETE)、改(UPDATE)的操作1. 对数据库(database)的操作1.1 创建数据库1.2 删除数..
2021-07-19 17:51:25
163
原创 MySQL学习笔记(一)基础概念
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q提取码:7pr8复制这段内容后打开百度网盘手机App,操作更方便哦
2021-07-19 17:23:44
141
原创 html文件中css插入方式总结
直接将我们创建的CSS-study文件夹拖动到vsCode中即可,可以看到vsCode左侧多了一个文件夹,如下图所示:vsCode中自动生成html代码段模板可以用快捷键 ! + tab。生成效果如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-eq...
2021-07-19 15:35:15
3439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人