- 博客(86)
- 收藏
- 关注
原创 AcWing 338. 计数问题
而实现这个函数具体功能,我们就巧妙地通过求解最大的数字n上的每一位i出现的次数,也即1 - n中所有数字的第一位是i的个数、1 - n中所有数字的第二位是i的个数、1 - n中所有数字的第三位是i等等,加在一起。就能得到count函数的返回值了。答题思路是首先采用前缀和的思想,我们需要求区间a到b上的,我们转化成1 - b上的减去1 - a - 1上的。
2023-02-19 19:13:30
487
原创 LeetCode 122. 买卖股票的最佳时机 II
这题重点在于我们如何将交易分解,这是很巧妙的。第i天买入,到第j天卖出(j >= i)可以分解为:第i天买入,第i+1天卖出,第i+1天买入,第i+2天又卖出,第i+2天再买入…以此类推到第j天,因此每天的买卖股票收益如果是正数,我们就可以将其加入答案当中。
2023-02-07 11:17:59
280
原创 LeetCode 121.买卖股票的最佳时机
做法大概就是我们枚举每一天的时候都假设该天卖出股票,我们去寻找该天之前的股票可以买入的最低价,然后在枚举过程中不断更新更优的答案。好家伙转眼快一个月没写题解了,过年题还是有在慢慢刷的,只是速度慢了很多哈哈哈。
2023-02-06 19:47:07
373
原创 LeetCode 70. 爬楼梯
这题属于递推题,我们可以手动推导一下,首先假设我们在第0阶,也就相当于地面。之后n = 1时,走到1阶我们只有一种方式,就是从0阶走一步到1。之后第2阶,则有两种方式:从第0阶走两步到2,从第1阶走一步到2。所以有多少种走到第1阶的方式,就有多少从第1阶走一步到第2阶的方式。
2023-01-17 10:40:55
80
原创 LeetCode 60.排列序列
做法一:用c++中自带的next_permutation来做,在这里是不会超时的。做法二:通过定位k所在区间来做。
2023-01-14 14:41:19
91
原创 LeetCode 45. 跳跃游戏 II
也不同,所以每一个点走一步所能到达最远的点都是不一样的。并且我们保证了走两步点组中的所有点,它们都是最少的步数,它们之中都不存在,明明一步能到的,我们给他更新成了两步(这个之前也分析了),同样也不存在的是,这个走两步点组的右边界的下一个点一定是需要走三步才能到的,也就是说我们把走两步点组的下标范围,也是更新成了最大的范围,不能再大了。这也是贪心的思想,每一个当前最优的状态的,是从上一个最优的状态更新过来的,上一个是最优状态,再走一步到达的这个点,肯定也是最优状态,这也就是这题动态规划+贪心的魅力所在吧。
2023-01-09 11:47:37
664
原创 LeetCode31.下一个排列
我们就停下不再继续了,此时我们再从已经找到了降序部分,也就是541,表明这是我们以23开头,所能达到的最大数字,接下来我们需要做的就是把23这个开头增大,增大到24 25之类的,然后后三位按照正序排列,此时得到的序列就符合题目的要求。所以之后我们从这一部分找出比3大,且离3最近的数字,也就是4,然后把3和4相互交换,也就是24531,最后再把531按照反序一下得到135,也就是24135,也就得到题中所要求我们按照字典序求出离23541最近的比它更大的数字,也就是24135。
2023-01-05 15:54:26
121
原创 LeetCode22.括号生成
利用这两个基本结论,我们可以每次放置左括号的条件是当前左括号的数目不超过。,每次可以放置右括号的条件是当前右括号的数目不超过左括号的数目。
2023-01-04 12:55:14
70
原创 LeetCode6.Z字形变换
中间每行都是一样的,但是中间每行需要改成两部分,第一部分是"直线部分",也就相当于下面图中的。这题重点就在好好读题找规律了,整个Z字形阵分为。第二部分则是位于“斜线”上的位置,例如。行,首行和尾行分别是。等这种位置,它们是以。
2022-12-30 15:13:59
135
原创 LeetCode3.无重复字符的最长子串
过程特别像计算机网络里面的滑动窗口,解题用到了双指针算法,以及双指针算法的优化(利用单调性进行优化),每次i往后枚举的过程中,j不可能往左边走了,也只会不动或者向右边走,证明可以用反证法。
2022-12-30 11:05:46
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人