CSMania

You may say I'm a Programmer, but I'm not the only one

代码随想录算法训练营第二十七天| 回溯算法

93.复原IP地址 虽然自己写的比较复杂,但还是自己独立写出来了。 自己写的时候遇到的问题有: 没搞清substr的parameter用处,第二个parameter是定义该string的长度,而不是endpoint在哪。我还以为是start_index和i的边界设的不管用了呢。 检查字符串不能有先导0的时候,把string单纯为0的情况给误杀了。 class Soluti...

代码随想录算法训练营第二十六天| 回溯算法

39. 组合总和 这道题连着做了三天,算是越来越熟了。其实稍微改一下就行。(是我昨天错做的那个版本) class Solution { public: vector<vector<int>> res; vector<int> path; void backtracking(vector<int> candidates, ...

代码随想录算法训练营第二十五天| 回溯算法

216.组合总和III 这道题我一开始写的时候觉得和昨天的那道题很像,就模仿着写了一遍。写出来之后,发现没有考虑vector里数值重复这件事。 class Solution { public: vector<vector<int>> res; vector<int> path; void backtracking(int k, i...

代码随想录算法训练营第二十四天| 回溯算法

77. 组合 这道题跟着Carl视频做下来的。原理是懂了,但看视频的时候没太仔细看,我原以为是要把path也传递下去,其实是不用的。需要传递的三个参数是数组长度、取数range和目前所取数的index。另外,要注意for loop里i需要小于等于n,因为如果不加上等于的话,假如取值区间是1-4,就不会有4加入到数组里。 这道题虽然不难,还是很重要,需要多做几遍。 class Solutio...

代码随想录算法训练营第二十二天| 二叉树

669. 修剪二叉搜索树 看到这道题,我的想法就是复刻前天的最后一题,因为同样都是删除二叉树节点。但是那道题我是看会了,自己写起来还是有点怵。这回参照着上次的,半看半理解的写了出来。但是发现有的时候不对呢。 class Solution { public: bool inbetween(TreeNode* cur, int low, int high){ if((cu...

代码随想录算法训练营第二十一天| 二叉树

235. 二叉搜索树的最近公共祖先 这个刷题训练营很好的一点是昨天做过的题,今天会有类似的让你加深记忆。就像是这道题,昨天我是看会了,但是自己没动手写。今天就有些不会做了。condition什么的还是有点没弄明白。还得动手啊。 class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNod...

《人类简史》读书笔记

第一章 各种科学的形成是有时间先后顺序的:135亿年前,因为“大爆炸”,宇宙的物质、能量、时间和空间成了现在的样子,才有了物理学。30万年后,物质和能量形成了复杂的结构,有了原子和分子的互动,便有了化学。在38亿年前,在地球这个行星上,一些分子结合起来形成了复杂的结构,叫做有机体。有了有机体,便有了生物学。七万年前,智人创造出了复杂的结构,成为文化。将智人文化继续发展,便成了历史学。 历史上...

代码随想录算法训练营第二十天| 二叉树

530.二叉搜索树的最小绝对差 本来想用昨天最后一道题那种解法去做,但是发现有的时候最小值不是两个相邻的节点(错用了二叉搜索树的特性)。中序历遍算出来的。做的时候太马虎了,在主函数里都忘了call travesal,我说怎么min_gap的值不变呢。 class Solution { public: vector<int> list; void travesal(...

代码随想录算法训练营第十九天| 二叉树

654.最大二叉树 虽然说昨晚没做那道靠前序后序写出真正二叉树的题,但是今天这道题也用了昨天那个思路,比昨天那题还能简单些。我参照了昨天题的答案一遍就写出来了(犯了个小错误,就是nums.size()等于1的时候,我开始return 的是nums[0],但我的意思其实是root) class Solution { public: TreeNode* constructMaximumB...

代码随想录算法训练营第十八天| 二叉树

513.找树左下角的值 用最笨的迭代法做出来了。 class Solution { public: int findBottomLeftValue(TreeNode* root) { queue<TreeNode*> que; int last_value; que.push(root); while(!qu...