LeetCode-21
1234. 替换子串得到平衡字符串
1 | class Solution { |
1138. 字母板上的路径
1 | class Solution { |
如果默认先纵向走,再横向走,那么当从外部到z时,需要先横向走再纵向走
如果默认先横向走,再纵向走,那么当从z到外部时,需要先纵向走再横向走
1 | class Solution { |
1 | class Solution { |
如果默认先纵向走,再横向走,那么当从外部到z时,需要先横向走再纵向走
如果默认先横向走,再纵向走,那么当从z到外部时,需要先纵向走再横向走
1 | class Solution { |
1 | class Solution { |
昨天第一个思路是用排序,找出最大的m个数,这m个数恰好将数组分成k个部分,发现不可行。
然后暴力搜索,超时了,暴搜时考虑添加隔板,其中left_value表示当前搜索下标i之前的分组平均值
1 | class Solution { |
简单题,排个序就行
1 | class Solution { |
最开始想复杂了,想用差分数组统计个数
leetcode 101的动态规划专题
1 | class Solution { |
dp数组表示上n层楼有几种可能
转移方程是 $ dp[i] = dp[i-1] + dp[i-2] $
上到第i层有可能从第i-1层或i-2层上来,则上到i层的可能数目就是 $ dp[i-1] + dp[i-2] $
由于dp[i]只需要前两个数的数据,所以可以优化掉dp数组,用两个变量代替,节省数组空间
1 | class Solution { |
笨方法,从右向左找,适当回溯
1 | class Solution { |
1 | class Solution { |
实现一个join函数就好了
1 | class Solution { |
关键在于想清楚如何生成这个神奇字符串,题目中说,s的前几个字符是12211
1生成1,s=1
2生成22,因为前一个1生成了1,这个2不能也生成1,s=122
2生成11,因为前一个2生成了2,这个2不能也生成2,s=12211
1生成2,前一个2生成了1,这个1就只能生成2了,s=122112
1生成1,s=1221121
2生成22,s=122112122
1 | class Solution { |
和之前写的一道题有点像,827. 最大人工岛
827. 最大人工岛
我先dfs找到所有连通子图和包围岛的0点,然后找这些点中有无同时包围多个岛的,把他们的面积加起来取最大值
这道题也可以使用相同的方法,找到每个岛屿的边界点,然后计算边界点的距离(只有两个岛,两个岛之间肯定是可以连通的,且不管使用那条途径,最短距离一定是 $ abs(x_1 - x_2) + abs(y_1-y_2)-1 $)
1 | class Solution { |
1 | class Solution { |
难,看懂解析思路后才写出来的
刚开始的思路是找0,把1分成了n段,取n/3 , 2n/3和 n段后面的0,然后向右移动双指针比较
后来发现有超级长的输入,超时了
解析的思路与我刚好相反,先数1的个数,如果是0或者不能被3整除,说明不能分成三段
1的个数为n,找到第0 n/3 2n/3个1,记为p1, p2, p3
p3到后末尾的长度就是三个子串的长度,如果p1 或 p2 + 字串长度分别大于p2 p3,说明无解
然后向后比较,若后面的数完全相同则有解
1 | class Solution { |
想法很简单,就是从左往右遍历,数当前遇到了几种水果,当遇到第三种水果后,更新一下装入水果的最大值,三种水果记录为typea, typeb, typec
然后回溯,找到前一个节点在左侧最后一个typea后第一次出现的位置(其实也是typea最后出现的位置的后两个位置)
1 | class Solution { |
1 | class Solution { |
4ms,和最快的思路刚好相反,用map存储arr的index,最快的思路是反过来,用map存一个piece的第一个index
1 | class Solution { |
1 | struct List { |