From 8c748680f1a6c4273cc0b3e0f2d2fabb1da712e5 Mon Sep 17 00:00:00 2001 From: XuDaHaoRen <1547794387@qq.com> Date: Tue, 24 Aug 2021 13:11:57 +0800 Subject: [PATCH] =?UTF-8?q?541~1382=E8=BF=9E=E6=8E=A5=E5=90=88=E5=B9=B6+co?= =?UTF-8?q?mmit=E4=B9=8B=E5=89=8D=20gitpull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0583.两个字符串的删除操作.md | 4 +- problems/0617.合并二叉树.md | 6 +-- problems/0647.回文子串.md | 2 +- problems/0649.Dota2参议院.md | 2 +- problems/0654.最大二叉树.md | 6 +-- problems/0657.机器人能否返回原点.md | 2 +- problems/0669.修剪二叉搜索树.md | 4 +- problems/0674.最长连续递增序列.md | 10 ++--- problems/0685.冗余连接II.md | 2 +- problems/0700.二叉搜索树中的搜索.md | 8 ++-- .../0701.二叉搜索树中的插入操作.md | 6 +-- problems/0704.二分查找.md | 4 +- problems/0707.设计链表.md | 6 +-- ...买卖股票的最佳时机含手续费.md | 8 ++-- ...佳时机含手续费(动态规划).md | 8 ++-- problems/0718.最长重复子数组.md | 2 +- problems/0738.单调递增的数字.md | 2 +- problems/0739.每日温度.md | 3 +- problems/0746.使用最小花费爬楼梯.md | 8 ++-- problems/0763.划分字母区间.md | 4 +- problems/0841.钥匙和房间.md | 2 +- problems/0844.比较含退格的字符串.md | 4 +- problems/0860.柠檬水找零.md | 2 +- problems/0925.长按键入.md | 2 +- problems/0941.有效的山脉数组.md | 4 +- problems/0968.监控二叉树.md | 2 +- problems/0977.有序数组的平方.md | 2 +- problems/1002.查找常用字符.md | 44 +++---------------- ...1005.K次取反后最大化的数组和.md | 2 +- problems/1035.不相交的线.md | 12 ++--- ...除字符串中的所有相邻重复项.md | 39 ++++------------ .../1049.最后一块石头的重量II.md | 16 +++---- problems/1143.最长公共子序列.md | 4 +- problems/1207.独一无二的出现次数.md | 6 +-- ...据数字二进制下1的数目排序.md | 2 +- ...65.有多少小于当前数字的数字.md | 6 +-- problems/1382.将二叉搜索树变平衡.md | 6 +-- 37 files changed, 97 insertions(+), 155 deletions(-) diff --git a/problems/0583.两个字符串的删除操作.md b/problems/0583.两个字符串的删除操作.md index f6c13039..89a8f57c 100644 --- a/problems/0583.两个字符串的删除操作.md +++ b/problems/0583.两个字符串的删除操作.md @@ -8,7 +8,7 @@ ## 583. 两个字符串的删除操作 -题目链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/ +[力扣题目链接](https://leetcode-cn.com/problems/delete-operation-for-two-strings/) 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 @@ -20,7 +20,7 @@ ## 思路 -本题和[动态规划:115.不同的子序列](https://mp.weixin.qq.com/s/1SULY2XVSROtk_hsoVLu8A)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。 +本题和[动态规划:115.不同的子序列](https://programmercarl.com/0115.不同的子序列.html)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。 这次是两个字符串可以相互删了,这种题目也知道用动态规划的思路来解,动规五部曲,分析如下: diff --git a/problems/0617.合并二叉树.md b/problems/0617.合并二叉树.md index b24a934b..22cfe147 100644 --- a/problems/0617.合并二叉树.md +++ b/problems/0617.合并二叉树.md @@ -9,7 +9,7 @@ ## 617.合并二叉树 -题目地址:https://leetcode-cn.com/problems/merge-two-binary-trees/ +[力扣题目链接](https://leetcode-cn.com/problems/merge-two-binary-trees/) 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 @@ -165,7 +165,7 @@ public: 使用迭代法,如何同时处理两棵树呢? -思路我们在[二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)中的迭代法已经讲过一次了,求二叉树对称的时候就是把两个树的节点同时加入队列进行比较。 +思路我们在[二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)中的迭代法已经讲过一次了,求二叉树对称的时候就是把两个树的节点同时加入队列进行比较。 本题我们也使用队列,模拟的层序遍历,代码如下: @@ -245,7 +245,7 @@ public: 合并二叉树,也是二叉树操作的经典题目,如果没有接触过的话,其实并不简单,因为我们习惯了操作一个二叉树,一起操作两个二叉树,还会有点懵懵的。 -这不是我们第一次操作两颗二叉树了,在[二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)中也一起操作了两棵二叉树。 +这不是我们第一次操作两颗二叉树了,在[二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)中也一起操作了两棵二叉树。 迭代法中,一般一起操作两个树都是使用队列模拟类似层序遍历,同时处理两个树的节点,这种方式最好理解,如果用模拟递归的思路的话,要复杂一些。 diff --git a/problems/0647.回文子串.md b/problems/0647.回文子串.md index f81801b7..7b90ca0c 100644 --- a/problems/0647.回文子串.md +++ b/problems/0647.回文子串.md @@ -8,7 +8,7 @@ ## 647. 回文子串 -题目链接:https://leetcode-cn.com/problems/palindromic-substrings/ +[力扣题目链接](https://leetcode-cn.com/problems/palindromic-substrings/) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 diff --git a/problems/0649.Dota2参议院.md b/problems/0649.Dota2参议院.md index b73686c4..9cec7401 100644 --- a/problems/0649.Dota2参议院.md +++ b/problems/0649.Dota2参议院.md @@ -67,7 +67,7 @@ Dota2 参议院由来自两派的参议员组成。现在参议院希望对一 局部最优可以退出全局最优,举不出反例,那么试试贪心。 -如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://mp.weixin.qq.com/s/O935TaoHE9Eexwe_vSbRAg) ,相信看完之后对贪心就有基本的了解了。 +如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://programmercarl.com/贪心算法理论基础.html) ,相信看完之后对贪心就有基本的了解了。 # 代码实现 diff --git a/problems/0654.最大二叉树.md b/problems/0654.最大二叉树.md index 8c310a21..ee7f5eeb 100644 --- a/problems/0654.最大二叉树.md +++ b/problems/0654.最大二叉树.md @@ -9,7 +9,7 @@ ## 654.最大二叉树 -题目地址:https://leetcode-cn.com/problems/maximum-binary-tree/ +[力扣题目地址](https://leetcode-cn.com/problems/maximum-binary-tree/) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: @@ -143,7 +143,7 @@ public: 以上代码比较冗余,效率也不高,每次还要切割的时候每次都要定义新的vector(也就是数组),但逻辑比较清晰。 -和文章[二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg)中一样的优化思路,就是每次分隔不用定义新的数组,而是通过下表索引直接在原数组上操作。 +和文章[二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html)中一样的优化思路,就是每次分隔不用定义新的数组,而是通过下表索引直接在原数组上操作。 优化后代码如下: @@ -212,7 +212,7 @@ root->right = traversal(nums, maxValueIndex + 1, right); ## 总结 -这道题目其实和 [二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg) 是一个思路,比[二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg) 还简单一些。 +这道题目其实和 [二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html) 是一个思路,比[二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html) 还简单一些。 **注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下表索引直接在原数组上操作,这样可以节约时间和空间上的开销。** diff --git a/problems/0657.机器人能否返回原点.md b/problems/0657.机器人能否返回原点.md index 480e830f..ffa5d6f2 100644 --- a/problems/0657.机器人能否返回原点.md +++ b/problems/0657.机器人能否返回原点.md @@ -9,7 +9,7 @@ # 657. 机器人能否返回原点 -题目地址:https://leetcode-cn.com/problems/robot-return-to-origin/ +[力扣题目链接](https://leetcode-cn.com/problems/robot-return-to-origin/) 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 diff --git a/problems/0669.修剪二叉搜索树.md b/problems/0669.修剪二叉搜索树.md index 267497b4..fe18e5a5 100644 --- a/problems/0669.修剪二叉搜索树.md +++ b/problems/0669.修剪二叉搜索树.md @@ -12,7 +12,7 @@ ## 669. 修剪二叉搜索树 -题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ +[力扣题目链接](https://leetcode-cn.com/problems/trim-a-binary-search-tree/) 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 @@ -71,7 +71,7 @@ public: 但是有返回值,更方便,可以通过递归函数的返回值来移除节点。 -这样的做法在[二叉树:搜索树中的插入操作](https://mp.weixin.qq.com/s/lwKkLQcfbCNX2W-5SOeZEA)和[二叉树:搜索树中的删除操作](https://mp.weixin.qq.com/s/-p-Txvch1FFk3ygKLjPAKw)中大家已经了解过了。 +这样的做法在[二叉树:搜索树中的插入操作](https://programmercarl.com/0701.二叉搜索树中的插入操作.html)和[二叉树:搜索树中的删除操作](https://programmercarl.com/0450.删除二叉搜索树中的节点.html)中大家已经了解过了。 代码如下: diff --git a/problems/0674.最长连续递增序列.md b/problems/0674.最长连续递增序列.md index 0fe1c49a..3f3b5e6f 100644 --- a/problems/0674.最长连续递增序列.md +++ b/problems/0674.最长连续递增序列.md @@ -8,7 +8,7 @@ ## 674. 最长连续递增序列 -题目链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/ +[力扣题目链接](https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/) 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 @@ -24,7 +24,7 @@ 输入:nums = [2,2,2,2,2] 输出:1 解释:最长连续递增序列是 [2], 长度为1。 - + 提示: * 0 <= nums.length <= 10^4 @@ -33,7 +33,7 @@ ## 思路 -本题相对于昨天的[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)最大的区别在于“连续”。 +本题相对于昨天的[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)最大的区别在于“连续”。 本题要求的是最长**连续**递增序列 @@ -53,7 +53,7 @@ 即:dp[i + 1] = dp[i] + 1; -**注意这里就体现出和[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)的区别!** +**注意这里就体现出和[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)的区别!** 因为本题要求连续递增子序列,所以就必要比较nums[i + 1]与nums[i],而不用去比较nums[j]与nums[i] (j是在0到i之间遍历)。 @@ -144,7 +144,7 @@ public: 本题也是动规里子序列问题的经典题目,但也可以用贪心来做,大家也会发现贪心好像更简单一点,而且空间复杂度仅是O(1)。 -在动规分析中,关键是要理解和[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)的区别。 +在动规分析中,关键是要理解和[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)的区别。 **要联动起来,才能理解递增子序列怎么求,递增连续子序列又要怎么求**。 diff --git a/problems/0685.冗余连接II.md b/problems/0685.冗余连接II.md index e282e620..68d0376e 100644 --- a/problems/0685.冗余连接II.md +++ b/problems/0685.冗余连接II.md @@ -11,7 +11,7 @@ # 685.冗余连接II -题目地址:https://leetcode-cn.com/problems/redundant-connection-ii/ +[力扣题目链接](https://leetcode-cn.com/problems/redundant-connection-ii/) 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 diff --git a/problems/0700.二叉搜索树中的搜索.md b/problems/0700.二叉搜索树中的搜索.md index 68d30e3f..2c2fdc43 100644 --- a/problems/0700.二叉搜索树中的搜索.md +++ b/problems/0700.二叉搜索树中的搜索.md @@ -9,7 +9,7 @@ ## 700.二叉搜索树中的搜索 -题目地址:https://leetcode-cn.com/problems/search-in-a-binary-search-tree/ +[力扣题目地址](https://leetcode-cn.com/problems/search-in-a-binary-search-tree/) 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 @@ -23,7 +23,7 @@ 之前我们讲了都是普通二叉树,那么接下来看看二叉搜索树。 -在[关于二叉树,你该了解这些!](https://mp.weixin.qq.com/s/_ymfWYvTNd2GvWvC5HOE4A)中,我们已经讲过了二叉搜索树。 +在[关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html)中,我们已经讲过了二叉搜索树。 二叉搜索树是一个有序树: @@ -73,7 +73,7 @@ return NULL; 这里可能会疑惑,在递归遍历的时候,什么时候直接return 递归函数的返回值,什么时候不用加这个 return呢。 -我们在[二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?](https://mp.weixin.qq.com/s/6TWAVjxQ34kVqROWgcRFOg)中讲了,如果要搜索一条边,递归函数就要加返回值,这里也是一样的道理。 +我们在[二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?](https://programmercarl.com/0112.路径总和.html)中讲了,如果要搜索一条边,递归函数就要加返回值,这里也是一样的道理。 **因为搜索到目标节点了,就要立即return了,这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。** @@ -327,7 +327,7 @@ var searchBST = function (root, val) { return searchBST(root.right, val); return null; }; -``` +``` > 迭代 diff --git a/problems/0701.二叉搜索树中的插入操作.md b/problems/0701.二叉搜索树中的插入操作.md index fdaba43e..c245ddcf 100644 --- a/problems/0701.二叉搜索树中的插入操作.md +++ b/problems/0701.二叉搜索树中的插入操作.md @@ -9,7 +9,7 @@ ## 701.二叉搜索树中的插入操作 -链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/ +[力扣题目链接](https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/) 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。 @@ -164,11 +164,11 @@ public: ## 迭代 -再来看看迭代法,对二叉搜索树迭代写法不熟悉,可以看这篇:[二叉树:二叉搜索树登场!](https://mp.weixin.qq.com/s/vsKrWRlETxCVsiRr8v_hHg) +再来看看迭代法,对二叉搜索树迭代写法不熟悉,可以看这篇:[二叉树:二叉搜索树登场!](https://programmercarl.com/0700.二叉搜索树中的搜索.html) 在迭代法遍历的过程中,需要记录一下当前遍历的节点的父节点,这样才能做插入节点的操作。 -在[二叉树:搜索树的最小绝对差](https://mp.weixin.qq.com/s/Hwzml6698uP3qQCC1ctUQQ)和[二叉树:我的众数是多少?](https://mp.weixin.qq.com/s/KSAr6OVQIMC-uZ8MEAnGHg)中,都是用了记录pre和cur两个指针的技巧,本题也是一样的。 +在[二叉树:搜索树的最小绝对差](https://programmercarl.com/0530.二叉搜索树的最小绝对差.html)和[二叉树:我的众数是多少?](https://programmercarl.com/0501.二叉搜索树中的众数.html)中,都是用了记录pre和cur两个指针的技巧,本题也是一样的。 代码如下: diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 2efbd7c4..e576443e 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -9,7 +9,7 @@ ## 704. 二分查找 -题目链接:https://leetcode-cn.com/problems/binary-search/ +[力扣题目链接](https://leetcode-cn.com/problems/binary-search/) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 @@ -139,7 +139,7 @@ public: ## 相关题目推荐 -* [35.搜索插入位置](./0035.搜索插入位置.md) +* [35.搜索插入位置](https://programmercarl.com/0035.搜索插入位置.html) * 34.在排序数组中查找元素的第一个和最后一个位置 * 69.x 的平方根 * 367.有效的完全平方数 diff --git a/problems/0707.设计链表.md b/problems/0707.设计链表.md index 10a3e948..e05165a9 100644 --- a/problems/0707.设计链表.md +++ b/problems/0707.设计链表.md @@ -11,7 +11,7 @@ # 707.设计链表 -https://leetcode-cn.com/problems/design-linked-list/ +[力扣题目链接](https://leetcode-cn.com/problems/design-linked-list/) 题意: @@ -28,9 +28,9 @@ https://leetcode-cn.com/problems/design-linked-list/ # 思路 -如果对链表的基础知识还不太懂,可以看这篇文章:[关于链表,你该了解这些!](https://mp.weixin.qq.com/s/fDGMmLrW7ZHlzkzlf_dZkw) +如果对链表的基础知识还不太懂,可以看这篇文章:[关于链表,你该了解这些!](https://programmercarl.com/链表理论基础.html) -如果对链表的虚拟头结点不清楚,可以看这篇文章:[链表:听说用虚拟头节点会方便很多?](https://mp.weixin.qq.com/s/L5aanfALdLEwVWGvyXPDqA) +如果对链表的虚拟头结点不清楚,可以看这篇文章:[链表:听说用虚拟头节点会方便很多?](https://programmercarl.com/0203.移除链表元素.html) 删除链表节点:  diff --git a/problems/0714.买卖股票的最佳时机含手续费.md b/problems/0714.买卖股票的最佳时机含手续费.md index b0a64bd2..4ac4684e 100644 --- a/problems/0714.买卖股票的最佳时机含手续费.md +++ b/problems/0714.买卖股票的最佳时机含手续费.md @@ -9,7 +9,7 @@ ## 714. 买卖股票的最佳时机含手续费 -题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ +[力扣题目链接](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/) 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。 @@ -37,11 +37,11 @@ ## 思路 -本题相对于[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg),多添加了一个条件就是手续费。 +本题相对于[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html),多添加了一个条件就是手续费。 ## 贪心算法 -在[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg)中使用贪心策略不用关心具体什么时候买卖,只要收集每天的正利润,最后稳稳的就是最大利润了。 +在[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)中使用贪心策略不用关心具体什么时候买卖,只要收集每天的正利润,最后稳稳的就是最大利润了。 而本题有了手续费,就要关系什么时候买卖了,因为计算所获得利润,需要考虑买卖利润可能不足以手续费的情况。 @@ -97,7 +97,7 @@ public: 我在公众号「代码随想录」里将在下一个系列详细讲解动态规划,所以本题解先给出我的C++代码(带详细注释),感兴趣的同学可以自己先学习一下。 -相对于[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg)的动态规划解法中,只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 +相对于[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)的动态规划解法中,只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 C++代码如下: diff --git a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md index 53952a7f..50db8868 100644 --- a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md +++ b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md @@ -8,7 +8,7 @@ ## 714.买卖股票的最佳时机含手续费 -题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ +[力扣题目链接](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/) 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。 @@ -36,7 +36,7 @@ ## 思路 -在讲解贪心专题的时候,我们已经讲过本题了[贪心算法:买卖股票的最佳时机含手续费](https://mp.weixin.qq.com/s/olWrUuDEYw2Jx5rMeG7XAg) +在讲解贪心专题的时候,我们已经讲过本题了[贪心算法:买卖股票的最佳时机含手续费](https://programmercarl.com/0714.买卖股票的最佳时机含手续费.html) 使用贪心算法,的性能是: * 时间复杂度:O(n) @@ -44,7 +44,7 @@ 那么我们再来看看是使用动规的方法如何解题。 -相对于[动态规划:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/d4TRWFuhaY83HPa6t5ZL-w),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 +相对于[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 唯一差别在于递推公式部分,所以本篇也就不按照动规五部曲详细讲解了,主要讲解一下递推公式部分。 @@ -68,7 +68,7 @@ dp[i][1] 表示第i天不持有股票所得最多现金 所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee); -**本题和[动态规划:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/d4TRWFuhaY83HPa6t5ZL-w)的区别就是这里需要多一个减去手续费的操作**。 +**本题和[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)的区别就是这里需要多一个减去手续费的操作**。 以上分析完毕,C++代码如下: diff --git a/problems/0718.最长重复子数组.md b/problems/0718.最长重复子数组.md index 2fe38f0a..9e3da663 100644 --- a/problems/0718.最长重复子数组.md +++ b/problems/0718.最长重复子数组.md @@ -8,7 +8,7 @@ ## 718. 最长重复子数组 -题目链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/ +[力扣题目链接](https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/) 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 diff --git a/problems/0738.单调递增的数字.md b/problems/0738.单调递增的数字.md index 82f7f3ae..f63a05b8 100644 --- a/problems/0738.单调递增的数字.md +++ b/problems/0738.单调递增的数字.md @@ -8,7 +8,7 @@ ## 738.单调递增的数字 -题目链接: https://leetcode-cn.com/problems/monotone-increasing-digits/ +[力扣题目链接](https://leetcode-cn.com/problems/monotone-increasing-digits/) 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。 diff --git a/problems/0739.每日温度.md b/problems/0739.每日温度.md index ddcbe428..b00701ed 100644 --- a/problems/0739.每日温度.md +++ b/problems/0739.每日温度.md @@ -9,8 +9,7 @@ # 739. 每日温度 - -https://leetcode-cn.com/problems/daily-temperatures/ +[力扣题目链接](https://leetcode-cn.com/problems/daily-temperatures/) 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。 diff --git a/problems/0746.使用最小花费爬楼梯.md b/problems/0746.使用最小花费爬楼梯.md index 9b691c5f..eb2a437a 100644 --- a/problems/0746.使用最小花费爬楼梯.md +++ b/problems/0746.使用最小花费爬楼梯.md @@ -8,7 +8,7 @@ ## 746. 使用最小花费爬楼梯 -题目链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/ +[力扣题目链接](https://leetcode-cn.com/problems/min-cost-climbing-stairs/) 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。 @@ -34,7 +34,7 @@ ## 思路 -这道题目可以说是昨天[动态规划:爬楼梯](https://mp.weixin.qq.com/s/Ohop0jApSII9xxOMiFhGIw)的花费版本。 +这道题目可以说是昨天[动态规划:爬楼梯](https://programmercarl.com/0070.爬楼梯.html)的花费版本。 **注意题目描述:每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯** @@ -185,9 +185,9 @@ public: # 总结 -大家可以发现这道题目相对于 昨天的[动态规划:爬楼梯](https://mp.weixin.qq.com/s/Ohop0jApSII9xxOMiFhGIw)有难了一点,但整体思路是一样。 +大家可以发现这道题目相对于 昨天的[动态规划:爬楼梯](https://programmercarl.com/0070.爬楼梯.html)有难了一点,但整体思路是一样。 -从[动态规划:斐波那契数](https://mp.weixin.qq.com/s/ko0zLJplF7n_4TysnPOa_w)到 [动态规划:爬楼梯](https://mp.weixin.qq.com/s/Ohop0jApSII9xxOMiFhGIw)再到今天这道题目,录友们感受到循序渐进的梯度了嘛。 +从[动态规划:斐波那契数](https://programmercarl.com/0509.斐波那契数.html)到 [动态规划:爬楼梯](https://programmercarl.com/0070.爬楼梯.html)再到今天这道题目,录友们感受到循序渐进的梯度了嘛。 每个系列开始的时候,都有录友和我反馈说题目太简单了,赶紧上难度,但也有录友和我说有点难了,快跟不上了。 diff --git a/problems/0763.划分字母区间.md b/problems/0763.划分字母区间.md index ccf654d4..43c663c2 100644 --- a/problems/0763.划分字母区间.md +++ b/problems/0763.划分字母区间.md @@ -9,7 +9,7 @@ ## 763.划分字母区间 -题目链接: https://leetcode-cn.com/problems/partition-labels/ +[力扣题目链接](https://leetcode-cn.com/problems/partition-labels/) 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 @@ -20,7 +20,7 @@ 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。 - + 提示: * S的长度在[1, 500]之间。 diff --git a/problems/0841.钥匙和房间.md b/problems/0841.钥匙和房间.md index bd7c99c9..4a0185ec 100644 --- a/problems/0841.钥匙和房间.md +++ b/problems/0841.钥匙和房间.md @@ -10,7 +10,7 @@ # 841.钥匙和房间 -题目地址:https://leetcode-cn.com/problems/keys-and-rooms/ +[力扣题目链接](https://leetcode-cn.com/problems/keys-and-rooms/) 有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。 diff --git a/problems/0844.比较含退格的字符串.md b/problems/0844.比较含退格的字符串.md index 32232c4a..e6bf3493 100644 --- a/problems/0844.比较含退格的字符串.md +++ b/problems/0844.比较含退格的字符串.md @@ -9,7 +9,7 @@ # 844.比较含退格的字符串 -题目链接:https://leetcode-cn.com/problems/backspace-string-compare/ +[力扣题目链接](https://leetcode-cn.com/problems/backspace-string-compare/) 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。 @@ -42,7 +42,7 @@ ## 普通方法(使用栈的思路) -这道题目一看就是要使用栈的节奏,这种匹配(消除)问题也是栈的擅长所在,跟着一起刷题的同学应该知道,在[栈与队列:匹配问题都是栈的强项](https://mp.weixin.qq.com/s/1-x6r1wGA9mqIHW5LrMvBg),我就已经提过了一次使用栈来做类似的事情了。 +这道题目一看就是要使用栈的节奏,这种匹配(消除)问题也是栈的擅长所在,跟着一起刷题的同学应该知道,在[栈与队列:匹配问题都是栈的强项](https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html),我就已经提过了一次使用栈来做类似的事情了。 **那么本题,确实可以使用栈的思路,但是没有必要使用栈,因为最后比较的时候还要比较栈里的元素,有点麻烦**。 diff --git a/problems/0860.柠檬水找零.md b/problems/0860.柠檬水找零.md index 792bee9a..46e05419 100644 --- a/problems/0860.柠檬水找零.md +++ b/problems/0860.柠檬水找零.md @@ -9,7 +9,7 @@ ## 860.柠檬水找零 -题目链接:https://leetcode-cn.com/problems/lemonade-change/ +[力扣题目链接](https://leetcode-cn.com/problems/lemonade-change/) 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 diff --git a/problems/0925.长按键入.md b/problems/0925.长按键入.md index c851a8df..3502f2fb 100644 --- a/problems/0925.长按键入.md +++ b/problems/0925.长按键入.md @@ -8,7 +8,7 @@
欢迎大家参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
# 925.长按键入 -题目链接:https://leetcode-cn.com/problems/long-pressed-name/ +[力扣题目链接](https://leetcode-cn.com/problems/long-pressed-name/) 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 diff --git a/problems/0941.有效的山脉数组.md b/problems/0941.有效的山脉数组.md index 98344949..ef5739e3 100644 --- a/problems/0941.有效的山脉数组.md +++ b/problems/0941.有效的山脉数组.md @@ -9,7 +9,7 @@ # 941.有效的山脉数组 -题目链接:https://leetcode-cn.com/problems/valid-mountain-array/ +[力扣题目链接](https://leetcode-cn.com/problems/valid-mountain-array/) 给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。 @@ -71,7 +71,7 @@ public: }; ``` -如果想系统学一学双指针的话, 可以看一下这篇[双指针法:总结篇!](https://mp.weixin.qq.com/s/_p7grwjISfMh0U65uOyCjA) +如果想系统学一学双指针的话, 可以看一下这篇[双指针法:总结篇!](https://programmercarl.com/双指针总结.html) # 其他语言版本 diff --git a/problems/0968.监控二叉树.md b/problems/0968.监控二叉树.md index 380ca8f8..c715279a 100644 --- a/problems/0968.监控二叉树.md +++ b/problems/0968.监控二叉树.md @@ -9,7 +9,7 @@ ## 968.监控二叉树 -题目地址 : https://leetcode-cn.com/problems/binary-tree-cameras/ +[力扣题目链接](https://leetcode-cn.com/problems/binary-tree-cameras/) 给定一个二叉树,我们在树的节点上安装摄像头。 diff --git a/problems/0977.有序数组的平方.md b/problems/0977.有序数组的平方.md index 71c46401..13142853 100644 --- a/problems/0977.有序数组的平方.md +++ b/problems/0977.有序数组的平方.md @@ -10,7 +10,7 @@ # 977.有序数组的平方 -https://leetcode-cn.com/problems/squares-of-a-sorted-array/ +[力扣题目链接](https://leetcode-cn.com/problems/squares-of-a-sorted-array/) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 diff --git a/problems/1002.查找常用字符.md b/problems/1002.查找常用字符.md index a789373b..39151185 100644 --- a/problems/1002.查找常用字符.md +++ b/problems/1002.查找常用字符.md @@ -10,7 +10,7 @@ # 1002. 查找常用字符 -https://leetcode-cn.com/problems/find-common-characters/ +[力扣题目链接](https://leetcode-cn.com/problems/find-common-characters/) 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。 @@ -23,7 +23,7 @@ https://leetcode-cn.com/problems/find-common-characters/ 【示例二】 输入:["cool","lock","cook"] 输出:["c","o"] - + # 思路 @@ -40,9 +40,9 @@ https://leetcode-cn.com/problems/find-common-characters/ 可以看出这是指数级别的时间复杂度,非常高,而且代码实现也不容易,因为要统计 重复的字符,还要适当的替换或者去重。 -那我们还是哈希法吧。如果对哈希法不了解,可以看这篇:[关于哈希表,你该了解这些!](https://mp.weixin.qq.com/s/RSUANESA_tkhKhYe3ZR8Jg)。 +那我们还是哈希法吧。如果对哈希法不了解,可以看这篇:[关于哈希表,你该了解这些!](https://programmercarl.com/哈希表理论基础.html)。 -如果对用数组来做哈希法不了解的话,可以看这篇:[把数组当做哈希表来用,很巧妙!](https://mp.weixin.qq.com/s/ffS8jaVFNUWyfn_8T31IdA)。 +如果对用数组来做哈希法不了解的话,可以看这篇:[把数组当做哈希表来用,很巧妙!](https://programmercarl.com/0242.有效的字母异位词.html)。 了解了哈希法,理解了数组在哈希法中的应用之后,可以来看解题思路了。 @@ -233,41 +233,7 @@ var commonChars = function (words) { return res }; ``` -GO -```golang -func commonChars(words []string) []string { - length:=len(words) - fre:=make([][]int,0)//统计每个字符串的词频 - res:=make([]string,0) - //统计词频 - for i:=0;i