算法
leetcode刷题总结
1.二叉树
2.字符串
决鳴
这个作者很懒,什么都没留下…
展开
-
排序算法
冒泡排序#include<iostream>using namespace std;//(1) 比较相邻的元素。如果第一个比第二个大,就交换它们两个;//(2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;//(3) 针对所有的元素重复以上的步骤,除了最后一个;//(4) 重复步骤1~3,直到排序完成。int main(){ int array[] = {23,54,1,67,3,7}; int length = siz原创 2020-11-21 21:10:24 · 67 阅读 · 0 评论 -
位运算
1.判断奇偶只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。(a&1)为真就是奇数2.交换两个数 a ^= b; b ^= a; a ^= b;3.正负交换a=~a+1;4.求绝对值int abs(int a) { int i = a >> 31; return i == 0 ? a : (~a + 1);}位操作进行高低位交换原创 2020-11-19 22:58:32 · 109 阅读 · 0 评论 -
2.1字符串匹配算法
KMP算法如何计算前缀表对于一个字符串aabaabaaf。匹配aabaaf对于一串字符串,从头开始于从未开始的两个字符串相等的字符个数就是最长相等前后缀长度得到的前缀表前缀表就用next数组来存储构造前缀表(构造next数组)1.初始化定义两个指针i和j,j指向前缀终止位置(严格来说是终止位置减一的位置),i指向后缀终止位置(与j同理)。再对next数组初始化。int j=-1;next[0]=j;2.处理前后缀不相同的情况如果 s[i] 与 s[j+1]不相同,也就是遇到原创 2020-10-27 23:39:53 · 122 阅读 · 0 评论 -
1.7二叉搜索树的修改
二叉搜索树的修改插入操作TreeNode* insertIntoBST(TreeNode* root, int val) { if (root == NULL) { TreeNode* node = new TreeNode(val); return node; } if (root->val > val) root->left = insertIntoBST(root->left,原创 2020-10-26 21:27:37 · 234 阅读 · 0 评论 -
1.6二叉树公共祖先问题
二叉树公共祖先问题(找两节点的最近父节点)二叉树的公共祖先如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (root == q || root == p || root == NULL) return root; Tree原创 2020-10-26 20:59:23 · 299 阅读 · 0 评论 -
1.5二叉搜索树的属性
二叉搜索树的属性搜索一个值二叉搜索树是一个有序树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树因此可以有方向的搜索一个值的位置递归法:TreeNode* searchBST(TreeNode* root, int val) { if (root == NULL || root->val == val) return root; if (root->va原创 2020-10-26 20:36:58 · 139 阅读 · 0 评论 -
1.4二叉树的修改与构造
修改与构造翻转二叉树递归法:(交换两个节点)TreeNode* invertTree(TreeNode* root) { if (root == NULL) return root; swap(root->left, root->right); // 中 invertTree(root->left); // 左 invertTree(root->right); // 右原创 2020-10-26 19:55:50 · 226 阅读 · 0 评论 -
1.3二叉树的属性
属性是否对称两条递归线,一路一直向外走,一路向树的内层靠近。再把递归的结果比较。是否出现不对称的情况。递归法:bool compare(TreeNode* left, TreeNode* right) { // 首先排除空节点的情况 if (left == NULL && right != NULL) return false; else if (left != NULL && right == NULL) retu原创 2020-10-25 23:50:44 · 257 阅读 · 0 评论 -
1.2二叉树的遍历
二叉树的遍历方式深度遍历(递归法)前序遍历 void traversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return; vec.push_back(cur->val); // 中 traversal(cur->left, vec); // 左 traversal(cur->right, vec); // 右原创 2020-10-25 21:51:43 · 135 阅读 · 0 评论 -
1.1二叉树基础
二叉树总结二叉树的种类满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。完全二叉树完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。二叉搜索树若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分原创 2020-10-25 20:56:51 · 187 阅读 · 0 评论