mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
541~1382连接合并+commit之前 gitpull
This commit is contained in:
@ -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)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。
|
||||
|
||||
这次是两个字符串可以相互删了,这种题目也知道用动态规划的思路来解,动规五部曲,分析如下:
|
||||
|
||||
|
@ -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)中也一起操作了两棵二叉树。
|
||||
|
||||
迭代法中,一般一起操作两个树都是使用队列模拟类似层序遍历,同时处理两个树的节点,这种方式最好理解,如果用模拟递归的思路的话,要复杂一些。
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
## 647. 回文子串
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/palindromic-substrings/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/palindromic-substrings/)
|
||||
|
||||
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
|
||||
|
||||
|
@ -67,7 +67,7 @@ Dota2 参议院由来自两派的参议员组成。现在参议院希望对一
|
||||
|
||||
局部最优可以退出全局最优,举不出反例,那么试试贪心。
|
||||
|
||||
如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://mp.weixin.qq.com/s/O935TaoHE9Eexwe_vSbRAg) ,相信看完之后对贪心就有基本的了解了。
|
||||
如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://programmercarl.com/贪心算法理论基础.html) ,相信看完之后对贪心就有基本的了解了。
|
||||
|
||||
# 代码实现
|
||||
|
||||
|
@ -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) 还简单一些。
|
||||
|
||||
**注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下表索引直接在原数组上操作,这样可以节约时间和空间上的开销。**
|
||||
|
||||
|
@ -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) 处结束。
|
||||
|
||||
|
@ -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)中大家已经了解过了。
|
||||
|
||||
代码如下:
|
||||
|
||||
|
@ -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)的区别。
|
||||
|
||||
**要联动起来,才能理解递增子序列怎么求,递增连续子序列又要怎么求**。
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
# 685.冗余连接II
|
||||
|
||||
题目地址:https://leetcode-cn.com/problems/redundant-connection-ii/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/redundant-connection-ii/)
|
||||
|
||||
在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
```
|
||||
```
|
||||
|
||||
> 迭代
|
||||
|
||||
|
@ -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两个指针的技巧,本题也是一样的。
|
||||
|
||||
代码如下:
|
||||
|
||||
|
@ -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.有效的完全平方数
|
||||
|
@ -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)
|
||||
|
||||
删除链表节点:
|
||||

|
||||
|
@ -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++代码如下:
|
||||
|
||||
|
@ -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++代码如下:
|
||||
|
||||
|
@ -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 ,返回两个数组中公共的、长度最长的子数组的长度。
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
## 738.单调递增的数字
|
||||
题目链接: https://leetcode-cn.com/problems/monotone-increasing-digits/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/monotone-increasing-digits/)
|
||||
|
||||
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
|
||||
|
||||
|
@ -9,8 +9,7 @@
|
||||
|
||||
# 739. 每日温度
|
||||
|
||||
|
||||
https://leetcode-cn.com/problems/daily-temperatures/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/daily-temperatures/)
|
||||
|
||||
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
|
||||
|
||||
|
@ -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)再到今天这道题目,录友们感受到循序渐进的梯度了嘛。
|
||||
|
||||
每个系列开始的时候,都有录友和我反馈说题目太简单了,赶紧上难度,但也有录友和我说有点难了,快跟不上了。
|
||||
|
||||
|
@ -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]之间。
|
||||
|
@ -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,并且房间里可能有一些钥匙能使你进入下一个房间。
|
||||
|
||||
|
@ -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),我就已经提过了一次使用栈来做类似的事情了。
|
||||
|
||||
**那么本题,确实可以使用栈的思路,但是没有必要使用栈,因为最后比较的时候还要比较栈里的元素,有点麻烦**。
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
## 860.柠檬水找零
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/lemonade-change/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/lemonade-change/)
|
||||
|
||||
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
||||
|
||||
# 925.长按键入
|
||||
题目链接:https://leetcode-cn.com/problems/long-pressed-name/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/long-pressed-name/)
|
||||
|
||||
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
|
||||
|
||||
|
@ -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)
|
||||
|
||||
# 其他语言版本
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
## 968.监控二叉树
|
||||
|
||||
题目地址 : https://leetcode-cn.com/problems/binary-tree-cameras/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/binary-tree-cameras/)
|
||||
|
||||
给定一个二叉树,我们在树的节点上安装摄像头。
|
||||
|
||||
|
@ -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,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
|
||||
|
||||
|
@ -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<length;i++{
|
||||
var row [26]int//存放该字符串的词频
|
||||
for j:=0;j<len(words[i]);j++{
|
||||
row[words[i][j]-97]++
|
||||
}
|
||||
fre=append(fre,row[:])
|
||||
}
|
||||
//查找一列的最小值
|
||||
for j:=0;j<len(fre[0]);j++{
|
||||
pre:=fre[0][j]
|
||||
for i:=0;i<len(fre);i++{
|
||||
pre=min(pre,fre[i][j])
|
||||
}
|
||||
//将该字符添加到结果集(按照次数)
|
||||
tmpString:=string(j+97)
|
||||
for i:=0;i<pre;i++{
|
||||
res=append(res,tmpString)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
func min(a,b int)int{
|
||||
if a>b{
|
||||
return b
|
||||
}
|
||||
return a
|
||||
}
|
||||
```
|
||||
|
||||
-----------------------
|
||||
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||
* B站视频:[代码随想录](https://space.bilibili.com/525438321)
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
## 1005.K次取反后最大化的数组和
|
||||
|
||||
题目地址:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/)
|
||||
|
||||
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
## 1035.不相交的线
|
||||
|
||||
题目链接: https://leetcode-cn.com/problems/uncrossed-lines/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/uncrossed-lines/)
|
||||
|
||||
我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。
|
||||
|
||||
@ -35,13 +35,13 @@
|
||||
|
||||
这么分析完之后,大家可以发现:**本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!**
|
||||
|
||||
那么本题就和我们刚刚讲过的这道题目[动态规划:1143.最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg)就是一样一样的了。
|
||||
那么本题就和我们刚刚讲过的这道题目[动态规划:1143.最长公共子序列](https://programmercarl.com/1143.最长公共子序列.html)就是一样一样的了。
|
||||
|
||||
一样到什么程度呢? 把字符串名字改一下,其他代码都不用改,直接copy过来就行了。
|
||||
|
||||
其实本题就是求最长公共子序列的长度,介于我们刚刚讲过[动态规划:1143.最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg),所以本题我就不再做动规五部曲分析了。
|
||||
其实本题就是求最长公共子序列的长度,介于我们刚刚讲过[动态规划:1143.最长公共子序列](https://programmercarl.com/1143.最长公共子序列.html),所以本题我就不再做动规五部曲分析了。
|
||||
|
||||
如果大家有点遗忘了最长公共子序列,就再看一下这篇:[动态规划:1143.最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg)
|
||||
如果大家有点遗忘了最长公共子序列,就再看一下这篇:[动态规划:1143.最长公共子序列](https://programmercarl.com/1143.最长公共子序列.html)
|
||||
|
||||
本题代码如下:
|
||||
|
||||
@ -66,9 +66,9 @@ public:
|
||||
|
||||
## 总结
|
||||
|
||||
看到代码大家也可以发现其实就是求两个字符串的最长公共子序列,但如果没有做过[1143.最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg),本题其实还有很有难度的。
|
||||
看到代码大家也可以发现其实就是求两个字符串的最长公共子序列,但如果没有做过[1143.最长公共子序列](https://programmercarl.com/1143.最长公共子序列.html),本题其实还有很有难度的。
|
||||
|
||||
这是Carl为什么要先讲[1143.最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg)再讲本题,大家会发现一个正确的刷题顺序对算法学习是非常重要的!
|
||||
这是Carl为什么要先讲[1143.最长公共子序列](https://programmercarl.com/1143.最长公共子序列.html)再讲本题,大家会发现一个正确的刷题顺序对算法学习是非常重要的!
|
||||
|
||||
这也是Carl做了很多题目(包括ACM和力扣)才总结出来的规律,大家仔细体会一下哈。
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
# 1047. 删除字符串中的所有相邻重复项
|
||||
|
||||
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/)
|
||||
|
||||
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
|
||||
|
||||
@ -26,7 +26,7 @@ https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
|
||||
* 输入:"abbaca"
|
||||
* 输出:"ca"
|
||||
* 解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
|
||||
|
||||
|
||||
|
||||
提示:
|
||||
* 1 <= S.length <= 20000
|
||||
@ -197,38 +197,15 @@ class Solution {
|
||||
|
||||
Python:
|
||||
```python3
|
||||
# 方法一,使用栈,推荐!
|
||||
class Solution:
|
||||
def removeDuplicates(self, s: str) -> str:
|
||||
res = list()
|
||||
for item in s:
|
||||
if res and res[-1] == item:
|
||||
res.pop()
|
||||
t = list()
|
||||
for i in s:
|
||||
if t and t[-1] == i:
|
||||
t.pop(-1)
|
||||
else:
|
||||
res.append(item)
|
||||
return "".join(res) # 字符串拼接
|
||||
```
|
||||
|
||||
```python3
|
||||
# 方法二,使用双指针模拟栈,如果不让用栈可以作为备选方法。
|
||||
class Solution:
|
||||
def removeDuplicates(self, s: str) -> str:
|
||||
res = list(s)
|
||||
slow = fast = 0
|
||||
length = len(res)
|
||||
|
||||
while fast < length:
|
||||
# 如果一样直接换,不一样会把后面的填在slow的位置
|
||||
res[slow] = res[fast]
|
||||
|
||||
# 如果发现和前一个一样,就退一格指针
|
||||
if slow > 0 and res[slow] == res[slow - 1]:
|
||||
slow -= 1
|
||||
else:
|
||||
slow += 1
|
||||
fast += 1
|
||||
|
||||
return ''.join(res[0: slow])
|
||||
t.append(i)
|
||||
return "".join(t) # 字符串拼接
|
||||
```
|
||||
|
||||
Go:
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
## 1049. 最后一块石头的重量 II
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/last-stone-weight-ii/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/last-stone-weight-ii/)
|
||||
|
||||
题目难度:中等
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
|
||||
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
|
||||
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。
|
||||
|
||||
|
||||
提示:
|
||||
|
||||
* 1 <= stones.length <= 30
|
||||
@ -39,12 +39,12 @@
|
||||
|
||||
如果对背包问题不都熟悉先看这两篇:
|
||||
|
||||
* [动态规划:关于01背包问题,你该了解这些!](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)
|
||||
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)
|
||||
* [动态规划:关于01背包问题,你该了解这些!](https://programmercarl.com/背包理论基础01背包-1.html)
|
||||
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html)
|
||||
|
||||
本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,**这样就化解成01背包问题了**。
|
||||
|
||||
是不是感觉和昨天讲解的[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)非常像了。
|
||||
是不是感觉和昨天讲解的[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)非常像了。
|
||||
|
||||
本题物品的重量为store[i],物品的价值也为store[i]。
|
||||
|
||||
@ -89,7 +89,7 @@ vector<int> dp(15001, 0);
|
||||
4. 确定遍历顺序
|
||||
|
||||
|
||||
在[动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)中就已经说明:如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒叙遍历!
|
||||
在[动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html)中就已经说明:如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒叙遍历!
|
||||
|
||||
代码如下:
|
||||
|
||||
@ -143,9 +143,9 @@ public:
|
||||
|
||||
## 总结
|
||||
|
||||
本题其实和[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)几乎是一样的,只是最后对dp[target]的处理方式不同。
|
||||
本题其实和[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)几乎是一样的,只是最后对dp[target]的处理方式不同。
|
||||
|
||||
[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)相当于是求背包是否正好装满,而本题是求背包最多能装多少。
|
||||
[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)相当于是求背包是否正好装满,而本题是求背包最多能装多少。
|
||||
|
||||
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
## 1143.最长公共子序列
|
||||
|
||||
题目链接: https://leetcode-cn.com/problems/longest-common-subsequence/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/longest-common-subsequence/)
|
||||
|
||||
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
|
||||
## 思路
|
||||
|
||||
本题和[动态规划:718. 最长重复子数组](https://mp.weixin.qq.com/s/U5WaWqBwdoxzQDotOdWqZg)区别在于这里不要求是连续的了,但要有相对顺序,即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
|
||||
本题和[动态规划:718. 最长重复子数组](https://programmercarl.com/0718.最长重复子数组.html)区别在于这里不要求是连续的了,但要有相对顺序,即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
|
||||
|
||||
继续动规五部曲分析如下:
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
# 1207.独一无二的出现次数
|
||||
|
||||
链接:https://leetcode-cn.com/problems/unique-number-of-occurrences/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/unique-number-of-occurrences/)
|
||||
|
||||
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
|
||||
|
||||
@ -35,9 +35,9 @@
|
||||
|
||||
# 思路
|
||||
|
||||
这道题目数组在是哈希法中的经典应用,如果对数组在哈希法中的使用还不熟悉的同学可以看这两篇:[数组在哈希法中的应用](https://mp.weixin.qq.com/s/ffS8jaVFNUWyfn_8T31IdA)和[哈希法:383. 赎金信](https://mp.weixin.qq.com/s/qAXqv--UERmiJNNpuphOUQ)
|
||||
这道题目数组在是哈希法中的经典应用,如果对数组在哈希法中的使用还不熟悉的同学可以看这两篇:[数组在哈希法中的应用](https://programmercarl.com/0242.有效的字母异位词.html)和[哈希法:383. 赎金信](https://programmercarl.com/0383.赎金信.html)
|
||||
|
||||
进而可以学习一下[set在哈希法中的应用](https://mp.weixin.qq.com/s/aMSA5zrp3jJcLjuSB0Es2Q),以及[map在哈希法中的应用](https://mp.weixin.qq.com/s/vaMsLnH-f7_9nEK4Cuu3KQ)
|
||||
进而可以学习一下[set在哈希法中的应用](https://programmercarl.com/0349.两个数组的交集.html),以及[map在哈希法中的应用](https://programmercarl.com/0001.两数之和.html)
|
||||
|
||||
回归本题,**本题强调了-1000 <= arr[i] <= 1000**,那么就可以用数组来做哈希,arr[i]作为哈希表(数组)的下标,那么arr[i]可以是负数,怎么办?负数不能做数组下标。
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
# 1365.有多少小于当前数字的数字
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/)
|
||||
|
||||
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
|
||||
|
||||
|
@ -10,14 +10,14 @@
|
||||
|
||||
# 1365.有多少小于当前数字的数字
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/)
|
||||
|
||||
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
|
||||
|
||||
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
|
||||
|
||||
以数组形式返回答案。
|
||||
|
||||
|
||||
|
||||
示例 1:
|
||||
* 输入:nums = [8,1,2,2,3]
|
||||
@ -36,7 +36,7 @@
|
||||
示例 3:
|
||||
* 输入:nums = [7,7,7,7]
|
||||
* 输出:[0,0,0,0]
|
||||
|
||||
|
||||
提示:
|
||||
* 2 <= nums.length <= 500
|
||||
* 0 <= nums[i] <= 100
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
# 1382.将二叉搜索树变平衡
|
||||
|
||||
题目地址:https://leetcode-cn.com/problems/balance-a-binary-search-tree/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/balance-a-binary-search-tree/)
|
||||
|
||||
给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。
|
||||
|
||||
@ -35,8 +35,8 @@
|
||||
这道题目,可以中序遍历把二叉树转变为有序数组,然后在根据有序数组构造平衡二叉搜索树。
|
||||
|
||||
建议做这道题之前,先看如下两篇题解:
|
||||
* [98.验证二叉搜索树](https://mp.weixin.qq.com/s/8odY9iUX5eSi0eRFSXFD4Q) 学习二叉搜索树的特性
|
||||
* [108.将有序数组转换为二叉搜索树](https://mp.weixin.qq.com/s/sy3ygnouaZVJs8lhFgl9mw) 学习如何通过有序数组构造二叉搜索树
|
||||
* [98.验证二叉搜索树](https://programmercarl.com/0098.验证二叉搜索树.html) 学习二叉搜索树的特性
|
||||
* [108.将有序数组转换为二叉搜索树](https://programmercarl.com/0108.将有序数组转换为二叉搜索树.html) 学习如何通过有序数组构造二叉搜索树
|
||||
|
||||
这两道题目做过之后,本题分分钟就可以做出来了。
|
||||
|
||||
|
Reference in New Issue
Block a user