刷题笔记:
1、ListNode* node = new ListNode(0,head);
the first member val to 0, and the second member next to head;在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的next 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。
2、auto counts=vector<int>( ) = vector<int> counts;
3、求最左节点:在二叉树中,从根节点出发,利用队,先入右孩子再入左孩子,访问的最后一个节点就是二叉树的最左边节点。
4、vector容器 v.emplace_back(2)比v.push_back(2)好,少了一步移动或拷贝临时对象过程。
5、二叉树的非递归前序遍历,先入根节点,再进行循环入左节点,直到全部进入,再一个个出来,找到他们的右节点。
前序遍历和中序很像,而后序遍历是在前序遍历上先入右后入左,在利用reverse(v.begin(),v.end()).
6、利用INT32_MAX来使用语言中的最大值。数组在内存中存储是有序的,只可以覆盖元素不可以删除,可以利用双指针来操作数组,很多方法时间复杂度从O(n*n)变为O(n).
7、C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。