自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 【力扣刷题】卡车上的最大单元数、腐烂的橘子

【代码】【力扣刷题】卡车上的最大单元数、腐烂的橘子。

2023-09-26 21:03:42 95

原创 【多线程学习】线程池、简单的银行取款模拟

将绑定后的函数对象赋给std::function<void()>类型的task,这样可以统一地处理任务,不管用户传入的函数有什么签名。该函数作用是将用户传入的函数(以及其参数)封装为一个可以无参数调用的任务,并将这个任务添加到任务队列中。使用std::move是为了避免不必要的拷贝,而是将task的资源转移到队列中的新任务对象。函数中,我们将任务封装成一个 std::function 对象,并将它添加到任务队列中。:使用std::bind将用户传入的函数和其参数绑定起来,创建一个可以无参数调用的函数对象。

2023-09-21 10:45:41 225

原创 【牛客刷题】最小k个数

或者手动维护一个k大小的数组que和一个最大值以及最小值,分几种情况处理,每次都需要用max_element来查找que里面的最大值并更新。实现,当奇数层的时候从左往右打印,偶数层的时候从右往左打印,对应双端队列就是:奇数层从前pop,从后push;偶数层从后pop,从前push。当A的大小(即m)大于B的大小(即n)时,实际上不需要处理剩余的A中的元素,因为它们已经在正确的位置上了。快速排序的变种——快速选择:把排序的步骤分离出来,每一次排序就是找到pivot在数组中应该在的。自己写的,逻辑比较清晰。

2023-09-18 23:13:54 97

原创 【牛客刷题】链表专项 Ⅱ()

题目没说不可以直接修改链表的值,所以用vector存值排序后直接改就行。美团一面的题呜呜呜,这个题没做出来我是真该死啊。

2023-09-11 15:58:17 94

原创 【牛客刷题】链表专项(合并两个链表、链表是否有环、链表中环的入口、删除链表的倒数第n个节点、找第一个公共节点、链表相加Ⅱ)

第一次因为想少写几步代码,所以直接return hasCycle?忘了增加判断有环再进行while循环找环入口了,所以导致报错。思路,先反转,然后从头删除第n个,再翻转回来。

2023-09-08 18:40:42 120

原创 【代码随想录】Day 51 动态规划12 //待做//(买卖股票冷冻期、买卖股票手续费)

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

2023-09-08 11:23:43 73

原创 【代码随想录】Day 45 动态规划7 (爬楼梯(进阶)、零钱兑换、完全平方数)

https://leetcode.cn/problems/climbing-stairs/https://leetcode.cn/problems/coin-change/https://leetcode.cn/problems/perfect-squares/

2023-09-08 10:39:02 95

原创 【代码随想录】Day 50 动态规划11 (买卖股票Ⅲ、Ⅳ)

还是就用代码随想录的写法吧。写的很好就是怎么都过不了。

2023-09-07 23:23:29 107

原创 【代码随想录】Day 49 动态规划10 (买卖股票Ⅰ、Ⅱ)

和树形dp类似,多加一个vector存储当前状态:dp[i][0]表示不持有股票,dp[i][1]表示持有股票。每种状态都由dp[i-1][0]和dp[i-1][1]两种状态转移而来,所以dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]):含义是第i天没股票,可能是由于i-1天也没股票,或者是i-1天有股票但是第i天给卖了,对于本来就没股票的情况利润保持一致就行,对于卖掉股票的情况则需要在dp[i-1][1]的利润上加上卖掉股票增加的利润;

2023-09-07 22:25:39 241

原创 【代码随想录】Day 48 动态规划9 (打家劫舍Ⅰ Ⅱ Ⅲ)

大名鼎鼎的树形dp入门题,确实没做过的话完全想不到。注意偷自己的时候,两个孩子都属于不能偷的状态,所以。,分别记录两种情况得到的最大金额。

2023-09-07 21:40:15 173

原创 【牛客刷题】bfs和dfs (二叉树层序遍历、矩阵最长递增路径、被围绕的区域)

拓扑排序(增加inDegrees矩阵)+ BFS。

2023-09-07 19:59:30 574

原创 【代码随想录】dfs和bfs (所有可能的路径、岛屿数量)

【代码】【代码随想录】dfs和bfs (所有可能的路径、岛屿数量)

2023-09-07 19:58:40 206

原创 【牛客刷题】反转固定区间链表、每k个节点一组反转

【代码】【牛客刷题】反转固定区间链表。

2023-09-06 22:54:07 587

原创 【牛客刷题】数组中出现次数超过一半的数字

摩尔投票法:每次从序列里选择两个不相同的数字删除掉,最后剩下的数就是主要元素(次数超过一半的元素)。在实际实现中,用一个变量。来保存候选主要元素,用一个计数器。

2023-09-06 13:43:15 42

原创 【代码随想录】Day57 动态规划17 (回文子串、最长回文子序列)

【代码】【代码随想录】Day57 动态规划17 (回文子串、最长回文子序列)

2023-09-05 23:29:52 94

原创 【代码随想录】Day40 动态规划3(整数拆分、不同的BST)

如果拆成 j * (i - j) ,就是拆成两个数相乘;如果拆成 j * dp[i - j],就是拆成两个以上数相乘,相当于拆分i - j;dp初始化,dp[0] = 0,dp[1] = 0,dp[2] = 1;dp[i]:拆分 i 得到的最大乘积;

2023-09-05 23:06:08 28

原创 【代码随想录】Day39 动态规划2(不同路径、不同路径Ⅱ)

要注意矩阵的第一行和第一列初始化!这道题和前一道的区别在于,

2023-09-05 23:05:12 166

原创 【代码随想录】Day52 动态规划13

递推公式:dp[i] = max(dp[j] +1,dp[i])dp[i]:以nums[i]为结尾的最长递增子序列长度。

2023-09-04 23:11:53 35

原创 【代码随想录】Day 53 动态规划14(最长公共子序列、不相交的线、最大子序和)

一定要记得设好dp大小,以及dp初始化,i从1开始。dp求的是以nums[i]为结尾的最大子序列和,max dp[i]才是题意要求的。对比两个字符串/数组之间的状态,要用二维dp来标志两个比较的状态,行为nums1,列为nums2。

2023-09-04 23:11:49 36

原创 【牛客刷题】最长无重复子数组、最长公共子串、最长回文子串

例如,对于数组 `[1,2,3,4,1,5,6,7,8,1]`,开始时`start=0`,`end=0`。当`end`遍历到第二个`1`时(即`arr[4]`),`start`指针会跳过第一个`1`,移动到`arr[1]`(即元素`2`)处。从数组的第一个元素开始向后遍历的。`end`指针会逐个遍历整个数组,而`start`指针只会在需要跳过重复元素时移动。`lastPos`这个`unordered_map`是用来快速查找一个元素最后出现的位置,以便我们能够迅速更新`start`指针。

2023-09-04 20:48:25 39

原创 【代码随想录】动态规划13

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

2023-09-04 20:03:32 37

原创 【代码随想录】贪心算法Ⅴ

【代码】【代码随想录】贪心算法Ⅴ。

2023-08-19 16:09:07 29

原创 【代码随想录】贪心算法Ⅳ

这道题看了题解,能明白先按身高从高到矮、按人数从少到多排列,但是sort以后的插入仍然没搞明白,为什么直接找到前面的人数然后插入到que相应的下标就行?这个点得再好好想想。局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。代码随想录写的没有GPT改的清楚,因此不放了。

2023-08-18 17:11:24 28

原创 【代码随想录】Day 32 贪心算法Ⅱ(买卖股票、跳跃游戏)

局部最优:当天减去前一天的差值为正数,所有的正利润相加;

2023-08-12 21:45:31 25

原创 【代码随想录】动态规划背包问题

0-1背包理论基础:

2023-08-11 15:51:03 15

原创 【代码随想录】Day 38 动态规划1

如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。如果打印出来和自己预先模拟推导是一样的,那么就是自己的递归公式、初始化或者遍历顺序有问题了。如果和自己预先模拟推导的不一样,那么就是代码实现细节有问题。

2023-08-11 10:49:57 53

原创 【代码随想录】Day 31贪心算法

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。唯一的难点就是如何通过局部最优,推出整体最优。使用贪心策略,先将饼干数组和小孩数组排序。如何验证可不可以用贪心算法?全局最优:选取最大“连续和”做题的时候,只要想清楚。

2023-08-10 21:02:21 68

原创 卡码网练习ACM模式

【代码】卡码网练习ACM模式。

2023-08-09 18:22:53 51 1

原创 【代码随想录】Day 23 二叉树最后一站(修建BST、有序数组构建BST、BST累加)

力扣力扣力扣

2023-08-07 22:13:52 18

原创 【代码随想录】Day22 二叉树进阶Ⅵ(BST最近祖先、BST插入、BST删除)

注意当要删除的节点为根节点时,需要找到右子树中最左的节点(即右子树中最小的节点),将它设为新的根节点,不要直接root = node,这样会乱掉节点的指向,而是修改root的值为最小节点的值,然后右子树再重新执行一遍delete函数,把最小节点删掉。• 如果节点同时具有左、右子树,找到右子树中的最小值节点,替换当前节点值,然后删除右子树中的最小值节点。从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先。

2023-08-07 22:10:30 17

原创 【代码随想录】Day 21 二叉树Ⅴ(BST最小差、众数、最小公共祖先)

但是这道题求的是二叉搜索树,二叉搜索树是有序的,所以可以用中序遍历做, 记录一下当前的count和最大的count。代码随想录写的和我写的有一点区别在于,我将所有操作都是放在if (pre!= null)里的,而他是只写关于count的操作,剩下的和maxCount的比较是放在if (pre)外面的。TIPS:如果递归函数有返回值,如何区分要搜索一条边,还是搜索整个树呢?

2023-08-07 19:40:40 40

原创 【代码随想录】Day 20 二叉树进阶Ⅳ(构造最大二叉树、二树合并、BST搜索、BST验证)

因此如果val大于根节点的值,那么应该比较root->right->val和val,即右子树递归;这个方法比较好,可以通过pre是否为空排除掉根节点的情况,如果是用val存数值则不好排除!二叉搜索树:节点的左子树的所有节点值都小于当前节点值,右子树所有节点值都大于当前节点值。节点10大于左节点5,小于右节点15,但右子树里出现了一个6,因此不是二叉搜索树。因此按照中序遍历左中右,会得到一个有序递增的数组。对二叉搜索树的概念不熟悉,踩太多坑,没能AC。此时可以初始化比较元素为。

2023-08-05 21:51:24 42 1

原创 【代码随想录】Day 18 二叉树进阶Ⅲ(左下角值、路径总和、中后序构造)

看了代码随想录的讲解,发现自己还是写复杂了,都不用回传节点的,直接在class类里面定义一个变量,然后在找到最下最左的叶子节点的时候直接修改变量的值就可以了。思路是先找到叶子节点,然后判断当前叶子节点的深度是否大于当前最大深度,如果是大的,就将其存入队列,因为查找顺序始终是从左往右找的,因此只要找到深度更大的叶子节点,将其存入queue的第一个,最后弹出队列的第一个就行。后来发现没必要用精简了以下。

2023-08-04 21:33:13 59 1

原创 【代码随想录】Day 17 二叉树进阶Ⅱ(平衡、路径、左叶子和)

如果简化,就是在传参的时候不用引用,这样每次传进去的就是从根节点到父节点的路径,每次子节点的操作不会修改path,如此也就不用再弹出path.back(),此外因为一开始没有写if (node == null) return;大概思路是正确的,使用前序遍历,在走到叶子节点的时候往上返回一个(回溯)。已AC,递归法,终止条件为当节点不为左叶子节点时,返回。区分是不是左叶子节点,代码随想录的简化版,

2023-08-02 22:24:50 24

原创 【代码随想录】Day 16 二叉树进阶(深度、节点个数)

看了代码随想录的解释才知道原来自己想的找到左叶子节点的深度以后将depth-1再找右叶子节点就是回溯。可惜遇到空节点的时候一直写不清楚。,高度是从下往上求,将孩子节点的高度返回给父节点,因此要用后序遍历(凡是需要收集孩子信息返回给上一层的题目都要用。写了老半天,最后还是靠chatGPT帮我修改才知道错哪了,二叉树好难啊啊啊QAQ。深度和高度:深度是任意一个节点到根节点的距离,高度是任意一个节点到叶子节点的距离。

2023-08-01 22:19:58 55

原创 【代码随想录】Day 15 二叉树Ⅱ(层序遍历、翻转、对称)

自己写的笨方法,将左子树翻转一下,顺序存下每个节点值,然后遍历右子树存下节点值,对比两个vector看是否相等,如果遇到null,就存入一个最大值INT32_MAX,否则直接跳过不存的话会出错。层序遍历是用队列来写的,在一个循环里遍历同一层的节点,遍历到的先pop,再将它的左右子节点加入队列,等本层节点遍历完后,队列里就全是下一层的节点了。首先比较外侧,看左子树的左孩子是否等于右子树的右孩子,然后比较内侧,看左子树的右孩子是否等于右子树的左孩子,如果有一处不相等返回false。

2023-07-26 23:56:29 33

原创 【代码随想录】Day 14 二叉树基础(前中后序遍历)

int val;

2023-07-25 23:58:43 45

原创 【代码随想录】Day 13 (滑动窗口最大值、TopK)

Compare后面跟着的less就是默认的比较类,默认是按。

2023-07-24 21:57:18 65

原创 【代码随想录】Day 11栈和队列Ⅱ(有效括号、字符串相邻重复项、逆波兰表达式)

c`在这里是一个`string`类型的变量。写`c[0]`其实是获取了这个字符串的第一个字符(`char`类型)。`char`类型在C++中被视为一种整数类型,所以可以在`switch`语句中使用它。例如,对于字符串`"+"`,`c[0]`就是字符`'+'`。将每一对有效的括号通过栈来排除:遇到左括号如"("、"["、"{"时入栈,遇到右括号")"、"]"、"}"时,检查栈顶元素是否是对应的左括号,如果是则出栈,否则返回`false`。最后,如果栈为空,返回`true`,否则返回`false`。

2023-07-22 23:07:16 63

原创 【代码随想录】Day 10 栈和队列(栈实现队列、队列实现栈)

HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。构建一个输入栈和一个输出栈,队列输入时push进输入栈就行,队列输出时要将输入栈里的元素反向存到输出栈中,然后pop输出栈的元素。栈是用底层容器来实现的,所以栈不是容器,而是容器适配器,可以控制使用哪种容器来实现栈的功能。empty(),判断队列是否为空,为空返回true,即1,非空返回false,即0。pop(),删除队列中第一个元素,返回值为void。

2023-07-21 23:37:29 44

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除