4月不做咸鱼,更多的是为了补上一些语法上的坑
2020/4/1
leetcode 914. 卡牌分组_Go
1 | package main |
leetcode 1111. 有效括号的嵌套深度_Go
1 | package main |
2020/4/2
leetcode 289. 生命游戏_Go
1 | package main |
2020/4/3
leetcode 8. 字符串转换整数_Go
1 | package main |
2020/4/4
leetcode 42. 接雨水_Go
1 | package main |
2020/4/5
leetcode 460. LFU缓存_Go
真难……
1 | package main |
2020/4/6
今天的每日一题我直接放弃了,做之前简单的吧……
leetcode 1013. 将数组分成相等的三个部分_Go
1 | package main |
2020/4/7
leetcode 面试题 01.07. 旋转矩阵_Go
我自己本身没有去纠结原地算法,我觉得这一题让我进一步了解copy这个机制已经有收获了
1 | package main |
2020/4/8
leetcode 面试题13. 机器人的运动范围_Go
1 | package main |
2020/4/9
leetcode 22. 括号生成_Go
这题我是用暴力做的
但引出了切片作为函数参数这个大坑,资料:https://www.jianshu.com/p/7439e7ae3c4c
从输出可以看出,当slice传递给函数的时候,新建了切片s。在函数中给s进行了append一个元素,由于此时s的容量足够到,并没有生成新的底层数组。当修改返回的ret的时候,ret也共用了底层的数组,因此修改ret的原始,相应的也看到了slice的改变。
append 操作
如果在函数内,append操作超过了原始切片的容量,将会有一个新建底层数组的过程,那么此时再修改函数返回切片,应该不会再影响原始切片
也就是说不在共享一个底层数组,那么即使是全局变量也无法修改了,大坑!!!
1 | package main |
1 | package main |
用了回溯时间快了两倍,剪枝还是重要的
2020/4/10
leetcode 151.翻转字符串里的单词_Go
这题用相关api做起来是很快的,既然可以直接写,用双端队列我觉得就有点得不偿失了,毕竟go中要用stack需要自己写
1 | package main |
leetcode 面试题 01.06. 字符串压缩_Go
1 | package main |
2020/4/11
leetcode 887.鸡蛋掉落_Go
说实话有点懵,就当学习dp了,之前看过dp,但也不至于这么难想公式
首先,第一步,直接阅读题解
第二步,解法一有二分,哦,想法一样
第三步,嗯?咋是这么写的,那没事了,我不会
这个视频讲的蛮好的:https://www.bilibili.com/video/BV1CJ411s7ud?from=search&seid=18159411945702423360
毕竟就算了解了dp怎么推到代码这个阶段水平要求还是高的
只用了DP的思路,超时的答案如下,还是很清晰易懂的
1 | package main |
尝试一下优化
这里用到了题解中的单调性,真厉害啊,在第五层
1 | package main |
终于搞定了,对dp的理解又加深了
2020/4/12
leetcode 面试题 16.03. 交点_Go
因为精度问题失败了
1 | package main |
用数学的做法做,我反正是学不来的,挂个答案记录一下,也没提交反正,慢慢学习
1 | func intersection(start1 []int, end1 []int, start2 []int, end2 []int) []float64 { |
2020/4/14
leetcode 455. 两数相加Ⅱ_Go
1 | package main |
leetcode 53. 最大字序和_Go
1 | package main |
2020/4/15
leetcode 542. 01矩阵_Go
1 | package main |
2020/4/16
leetcode 52. 合并区间_Go
1 | package main |
2020/4/17
leetcode 55. 跳跃游戏_Go
1 | package main |
2020/4/18
leetcode 11. 盛水最多的容器_Go
1 | package main |
leetcode 104. 二叉树的最大深度_C++
我们从本地的测试集开始写才是真正的写好一道题哦
不觉得构造一颗树更有收获么,开始重新回忆C++
1 |
|
leetcode 101. 对称二叉树_C++
第一反应是懵的,看了一下官方题解,有个思路很重要
- 它们的两个根结点具有相同的值。
- 每个树的右子树都与另一个树的左子树镜像对称
什么我也能这么拆解题目就好了呢
1 |
|
2020/4/19 && 20
leetcode 455. 分发饼干_C++
1 |
|
leetcode 股票题C++
通解,花里胡哨的情况有一堆,打算采用暴力枚举dp状态的方式想把所有的题目都做了,然后再改进
所有题目的状态无非就是三类,天数(n);允许交易的最大次数(K);是否持有股票(0/1)
总状态开一个三维的dp数组能应付一切情况
leetcode 121. 买卖股票的最佳时机_C++
K==1,这个状态对dp没有什么影响了,成功降维省空间
1 |
|
leetcode 122. 买卖股票的最佳时机 II_C++
这次K变成了正无穷大
只展示maxProfit函数
我们推理一下状态转移公式
1 | dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]) |
1 | // 122. 买卖股票的最佳时机 II |
leetcode 123. 买卖股票的最佳时机 III_C++
仔细分析和上面的题目基本一样了,k为2
但是我实在是忍受不了0代表第一天了,就改了下下标
1 | // 123. 买卖股票的最佳时机 III |
leetcode 188. 买卖股票的最佳时机IV_C++
这题只不过k变成了我们输入的值
然后做了一下发现出了个问题,样例中k可以为1000000000,我们直接开dp数组会超过可用的内存空间
所以我们需要对K>len/2的情况单独讨论
那么K上限是无穷大,对于本次问题没有约束力了,那么我们直接降维即可
1 | // 188. 买卖股票的最佳时机 IV |
leetcode 309. 最佳买卖股票时机含冷冻期_C++
可以看到对K没有限制,又可以降维了
1 | // 309. 最佳买卖股票时机含冷冻期 |
leetcode 714. 买卖股票的最佳时机含手续费_C++
easy,改改我们的参数就好了
1 | // 714. 买卖股票的最佳时机含手续费 |
leetcode 200. 岛屿数量_Go
一开始用的BFS,提交之后发现很慢,for嵌套的太多了,就用DFS又写了一次,快了些
1 | package main |
并查集暂时不看了,有些遗忘,而且总觉得使用率不高
2020/4/21
leetcode 1248. 统计优美子数组_Go
1 | package main |
2020/4/22
leetcode 199. 二叉树的右视图_Go
1 | package main |
2020/4/23
leetcode 面试题 08.11. 硬币_Go
1 | package main |
2020/4/24
leetcode 面试题51. 数组中的逆序对_Go
1 | package main |
2020/4/25 && 26
背包九讲_C++
题目来自ACWing
0/1背包问题
1 |
|
完全背包问题
1 |
|
leetcode 46. 全排列_Go
1 | package main |
leetcode 23. 合并K个排序链表_Go
1 | package main |
想要优化很容易想到就是直接类似于归并排序来提速
2020/4/27
leetcode 33. 搜索旋转排序数组_Go
1 | package main |
2020/4/28
今天主要配置了一下vscode下C++的配置,做点实验
leetcode 1. 两数之和_C++
1 |
|
1 |
|
leetcode 面试题56 - I. 数组中数字出现的次数_Go
1 | package main |
2020/4/29
leetcode 1095. 山脉数组中查找目标值_Go
1 | package main |
2020/4/30
四月收官了,也做了不少算法题,最近压力也有一些,还算满意吧
leetcode 202. 快乐数_Go
1 | package main |
快慢指针法,挂个官方的吧,很好理解
1 | func isHappy(n int) bool { |
本文链接: http://woaixiaoyuyu.github.io/2020/04/09/%E7%AE%97%E6%B3%95%E5%94%AF%E6%89%8B%E7%86%9F%E5%B0%944%E6%9C%88/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!