时间来到了二月,转眼间刷题五天了,简单的写一个总结,然后继续刷题。easy刷了不少,medium没几个,涉及到数组、链表(插入、删除)、字符串(前缀串)、DP(01背包、斐波那契相关)、二叉树(遍历、平衡二叉树),用到了C++中的vector、unordered_map、unordered_set。尽管没有什么质变,但因为本来水平也不高,算是重新拾起C++。都是为了保研和实习,越做越认识到自己编程能力的不足,对基本算法和数据结构的掌握也是浅尝辄止,更不要说高级数据结构和算法。时间还有,希望自己能够坚持住,一定能够取得一个满意的结果,也不辜负自己在东北的寒冬中留校付出的努力。
1.Balanced Binary Tree 是一个平衡二叉树问题,对于平衡二叉树的定义,本题默认的是AVL树,即满足一下两个条件①左右子树高度差不能超过一;②左右子树都为平衡二叉树。对于二叉树应该首先考虑递归, 所以 一个递归函数求树高度,另一递归函数判断左右子树是否为平衡二叉树。
由于开始对于本题的平衡二叉树定义不明确,思路是求根节点到叶子结点的距离,判断最大值和最小值之差,但是对于如下的左树不适用。后来又单纯判断左右子树是否为平衡二叉树,但对于如右树不适用。所以改变思路,然后AC;
2.Pascal's Triangle(杨辉三角形) 求某一行可以从上一行的倒序入手;
3.Buy and Sell Block II 假设价格序列为 [a, b, c, d], d-a = (b-a)+(c-b)+(d-c) 因此只要利润大于零,可以连续的买入卖出,就能够获得最大值;
4.Valid Palindrome 判断字符串是否为回文串,需要考虑:同一字母大小写看做相等,除了字母数字以外的其他字符不考虑,空字符串,都为空格的字符串。