摘要:
理论基础 二叉树的存储方式:可以链式也可以顺序 用数组顺序存储 二叉树的遍历 递归遍历 递归算法三要素 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 风格不统一的迭代遍历(前后和中序的不同) 前序遍历(根左右) //递归版 void traversal(TreeNode* cur, 阅读全文
摘要:
239. 滑动窗口最大值 错误示例:在k=50000超时,O(n*k) class Solution { public: int getMax(vector<int>& nums,int a,int b) { int max = nums[a]; for (int i = a+1; i <= b; 阅读全文
摘要:
20.有效的括号 遇到左括号入栈,遇到右括号弹出 bool isValid(string s) { stack<char> kuohao; char c; for (char a : s) { switch (a) { case'(': case'{': case'[': kuohao.push(a 阅读全文
摘要:
理论基础 栈和队列是STL(C++标准库)里面的两个数据结构 STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器) 栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现 我们常用的SGI STL,如果没有指 阅读全文
摘要:
28.实现 strStr() KMP算法 KMP算法:字符串匹配问题,提前构建next表 next表(前缀表):利用成功匹配的经验,长度为t的前后缀相匹配,next[j]=t next表再改进:利用失败匹配的经验,如果P[j]和P[t]相等,仍然是徒劳? 阅读全文
摘要:
344反转字符串 void reverseString(vector<char>& s) { char tmp; int i = 0, j = s.size() - 1; while (i<j) { tmp = s[i]; s[i] = s[j]; s[j] = tmp; i++; j--; } } 阅读全文
摘要:
454四数相加II(哈希-map) 暴力:n⁴ 分别遍历a+b和c+d:2n² int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) { int count = 阅读全文
摘要:
哈希表理论基础 用法:一般哈希表都是用来快速判断一个元素是否出现集合里,哈希法牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找 eg:例如要查询一个名字是否在这所学校里,要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到 阅读全文
摘要:
24两两交换列表元素 ListNode* swapPairs(ListNode* head) { ListNode* shead = new ListNode(); //初始化 shead->next = head; ListNode* cur = shead; ListNode* tmp; //确 阅读全文
摘要:
链表理论基础 链表节点的定义 struct ListNode { int val; // 节点上存储的元素 ListNode *next; // 指向下一个节点的指针 ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 }; ==如果不自己定义构造函 阅读全文