程序题刷题经验

二叉树

最好不要去区分左右子节点是否为空,这样会加大麻烦,直接判断节点是否为空就可以了。

int fun(strcut TreeNode *root)
{
    if (root != NULL) {
        //做其他事情1
        fun(root->left);
        //做其他事情2
        fun(root->right);
        //做其他事情3
    }
}

字符串

Unicode编码中所有的字符都使用两个字节

数组

跳出多重循环用goto

    for () {
		for () {
			for () {
				if () {
					goto ret;
				}
			}
		}
	}
ret:
	cout<<"ok"<<endl;

链表

算法

  1. 暴力法

  2. 递归、循环

  3. 回溯法

  4. 动态规划

  5. 贪婪算法

  6. 分治法

  7. 哈希表

1. 旧题一定要做熟,短时间内要bug free的写出来。如果你不能bug free写出来,那你还是不熟, 请继续练习没有借口。
2. 想想一题多解,每种办法的优缺点是什么。
3. 最优解. 但请勿追求奇技淫巧。
4. 时间复杂度,空间复杂度。
5. 代码简洁,规范,美观,可维护性。
6. 掌握一些套路,并熟练使用。
7. 每道旧题都当新题来做,从头分析, 绝对不能偷懒。
8. 要练习讲题,面试的时候要能够讲清楚。先从high level, 再讲detail。
9. 分类做题可以对特定知识点强化记忆,很有效果。
10. 不要上来就刷hard题。在算法没有基础的情况下,手刃hard 是一件很有成就感的事情,不过你真的需要这个成就感吗? 先刷easy, medium 把所有知识点扫一遍盲最重要。
11. 基本功一定要扎实, 基础题要写的非常熟。比如树的各种traversal, quick sort, merge sort, heapify, reverse linkedList, recursion 

猜你喜欢

转载自blog.csdn.net/QQ2558030393/article/details/93377868