自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (4)
  • 收藏
  • 关注

原创 具有n个节点的度为m的树的最大高度和最低高度推导

一、最大高度试想一下,若有n个节点的m叉树,当只有最后一层有m个节点,其余层均只有一个节点,在所有含有个节点的m叉树中一定是最高的。二、最低高度当每个非终端节点均含有m个孩子节点时间,此时整棵树在所有含有n个节点的m叉树中是最矮胖的,此时这棵树的高度也是含有n个节点m叉树中高度最低。在极限的状态下可以称之为满m叉树,因此可以推导不等式,得出最低高度。结论:综上分析,对于一个含有n个节点...

2019-11-29 12:23:03 8313 4

原创 单源最短路径--floyd算法

void floyd() { for (int k=1; k<=n; ++k) { for (int i=1; i<=n; ++i) { for (int j=1; j<=n; ++j) { if (i == j || i == k || j == k) continue; //避免不必要的判断 提高程序效率 else g[i][j] = min(g...

2019-11-27 22:12:31 453

原创 四大查找ASL的总结

一、一般线性表的顺序查找ASL成功 = (n+1)/2ASL失败 = (n+1)二、有序线性表的顺序查找ASL成功 = (n+1)/2ASL失败 = (n+1)/2 + n/2三、二分查找二分查找的ASL成功和ASL失败通过画出对应查找序列的判定树,进而进行计算。四、索引查找ASL = I块内 + I块间其中块间可以使用二分查找。(1)ASL = (b+1)/2 + (s+1...

2019-11-26 20:54:44 6843

原创 数据结构中“哨兵”的使用

1.顺序查找中的哨兵:通过引入哨兵,可以必满很多不必要的语句,从而提高程序效率。2.直接插入排序的哨兵:免去查找过程中每一步都要检测整个查找表是否产找完毕,提高查找效率。...

2019-11-26 20:18:33 1990

原创 二叉树:在孩子兄弟链表表示的树中求叶子节点的个数

typedef struct CSNode { int val; CSNode *firstchild, *nextsibling;} CSNode, *CSTree;int dfs(CSTree *root) { if (!root) return 0; else if (!root->firstchild) return 1; else { int le...

2019-11-24 16:16:06 6986 11

原创 差分

题目描述:输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式:第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式:共一行,包含n个整数,表示最终序列。数据范围:1≤n,m≤100000,1≤l...

2019-11-20 20:33:44 176

原创 前缀和

问题描述,现在给定一个闭区间数组,求区间[l,r]的数据元素之和,询问m次,要求线性时间复杂度O(n)。比较常规的思路是使用循环遍历相加,但是一次循环的时间复杂度为O(n),m次询问最终的时间复杂度为O(n*m),显然是不满足要求的。我们可以采用空间换时间的策略,设置一个前缀和数组d,数组中任意位置i表示的是d[i] = a[1] + a[2] + … + a[i],经过这样的预处理,询问任意...

2019-11-20 19:28:01 177

原创 快速读入的技巧

在OJ上练习题目时,有些题目数据的输入非常大,即便是使用scanf()也会被卡常数,最后导致TLE。因此搜集网上的解决方案,常见的有以下两种:一、当数据量不是特别大的时间,此时可以关闭stdio的同步,使得cin,cout与printf, scanf一样快。核心代码:ios::sync_with_stdio(false)//此时注意在程序中不能再使用任何stdio的库函数,否则会造成混乱。...

2019-11-20 14:37:21 418

原创 求解逆序对的个数(由归并排序衍生出的O(nlogn)时间复杂度的算法)

逆序:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一、暴力做法int count(int *a, int n) { int res = 0; for (int i=0; i<n-1; ++i) { for (int j=1; j<n; ++j) { if (a[i] > a[j]) res ++; } ...

2019-11-19 11:55:40 578

原创 常见排序算法的时间复杂度和空间复杂度表

2019-11-17 17:54:48 258

原创 严格m叉树(正则m叉树)

严格m叉树:只有度为0的节点和度为m的节点。如何构造正则m叉树:首先寻找N0节点的个数与Nm节点的个数之间的关系。(1)从节点个数看:N = N0 + Nm(2)从分支数看:N - 1 = mNm联立两个方程得:(m-1)*Nm = N0-1所以:Nm = (N0-1)/(m-1)开始时,有n个节点,即叶子节点有n个。计算Nm=(N0-1)%(m-1),如果Nm=0则说明刚刚好可以构造...

2019-11-13 09:50:31 4704 2

原创 链地址法处理hash冲突建立Hash表代码练习

给定一个数组x[] = {4, 1, 3, 7, 8, 22, 45, 75}, 哈希函数为H(key) = key*2 % 11,采用链地址法处理哈希冲突。建立哈希表:#include <bits/stdc++.h>using namespace std;const int maxsize = 11;//哈希函数int hash(int x) {return x*2 % ...

2019-11-11 09:50:13 537

原创 B-树查找算法的简单实现

B-树节点类定义struct node { int n; //关键字个数 int key[maxsize]; //关键字数组 node *ptr[maxsize+1]; //指向孩子节点的指针的数组};//在以root为根节点的B树中查找值为x的节点node *dfs(node *root, int x) { if (!root) return NULL; else { i...

2019-11-09 23:36:07 461

原创 八皇后--回溯法

#include <bits/stdc++.h>using namespace std;const int N=8;int chess[N][N];int cnt = 0;void init() { for (int i=0; i<N; ++i) { for (int j=0; j<N; ++j) chess[i][j] = 0; }}v...

2019-11-09 15:47:34 132

原创 前缀表达式(波兰表达式)的计算

波兰表达式也称之为前缀表达式,即运算符放置于操作数之前。计算波兰表达式的值的方法:(1)从后往前遍历表达式。(2)遇到数字直接入栈。(3)遇到运算符,取出两个数字,第一个作为操作数,第二作为被操作数,执行相应的运算。将运算的结果继续入栈。(4)当表达式遍历完时,此时栈顶元素即为计算结果。int cal(string s) { stack<int> st; for (i...

2019-11-09 09:55:27 1368

原创 单链表:删除带头结点递增有序单链表中开区间(a,b)的所有节点

struct node { int val; node *next;};void deleteBetweenMaxAndMin(node *head, int minv, int maxv) { node *p = head; node *q = head->next; node *premin = head, *premax = head; node *pmin ...

2019-11-09 09:06:32 1076

原创 二叉树:关于二叉树节点个数以及高度计算的相关问题以及其衍生问题

1.N个节点的二叉树的最低高度和最高高度?2.N个节点完全二叉树的最低高度或者最高高度?3.N个节点的m叉树的最小高度和最大高度?4.高度为h的完全二叉树最小有多少个节点,最多有多少个节点?5.给定完全二叉的节点个数,求完全二叉树叶子节点的个数?6.给定完全二叉树叶子节点的个数,求最多的节点个数?7.给定完全二叉树在某层有n个叶子节点,则完全二叉树的最多和最少节点个数?8.给定完全二...

2019-11-08 23:44:02 2589

原创 单链表:删除带头节点单链表中最小值所有在的节点

思路:用两对前驱和后继节点,分别比较当前节点的前驱和后继以及最小值界定啊的前驱和后继。遍历完整个链表,删除最小值节点即可。struct node { int val; node *next;};void deleteMin(node *head) { node *p = head, *q = head->next; node *premin = head, *pmin =...

2019-11-08 19:58:39 1034

原创 二叉树:统计二叉树同时拥有左右孩子节点的个数

二叉树遍历的应用struct node { int val; node *left, *right;};int dfs(node *root) { if (!root) return 0; if (root->left && root->right) return1; return dfs(root->left) + dfs(root->r...

2019-11-08 11:00:06 2650

原创 数据结构:三元组的定义(考研)

//非零元素的节点类的定义struct triple { int e; int col, row;};#define maxsize 100struct tripleMatrix { triple data[maxsize]; int m;//m行 int n;//n列 int size;//三元组中非零元素的总个数};注意:三元组在存储稀疏矩阵时,只有当稀疏矩阵的稀...

2019-11-08 10:17:38 6000 3

原创 二叉树:二叉树的最大路径和

二叉树的最大路径和,枚举二叉树的每一个节点,通过当前节点最大路径和是, 当前节点左子树的最大路径和+root->val+当前节点右子树的最大路径。struct node { int val; node *left, *right;};int ans = MIN_MAX;//用于维护最大路径和int dfs(node *root) { if (!root) return 0;...

2019-11-07 20:23:59 235

原创 二叉树:二叉树的直径

二叉树直径的定义:二叉树中路径的最大长度二叉树中路径的最大长度,可以理解所有节点的左右子树高度之和的最大值。假设二叉树有n个节点,编号为{a1,a2,…,an}, 其对应的左右子树的高度之和为H = {h1,h2,h3,…,hn}, 则该二叉树的直径为max(H)。struct node { int val; node *left, *right;};int ans = 0;// ...

2019-11-07 20:08:44 1542

原创 算法:判断字符串是否为回文串的三种方法(递归,循环,使用栈模拟递归)(考研)

一、递归bool ispalindrome(string s, int i, int j) { if (i >= j) return true; if (s[i] == s[j]) return ispalindrome(s, i+1, j-1); else return false;}二、使用栈模拟递归bool ispalindrome(string s) { int n...

2019-11-07 14:01:29 2467

原创 二叉树:前序、中序和后序遍历的方便记忆和应试非递归写法(考研)

前序遍历:struct node { int val; node *left,*right; };vector<int> preorder(node *root) { vector<int> res; if (!root) return res; stack<node*> st; auto p = root; while (p || st.s...

2019-11-07 08:48:07 201

原创 合并两个有序数组,要求时间复杂度为O(n),空间复杂度为O(1)

思路:因为数组已经是有序的,因此我们可以直接从两个数组的末位开始比较,将大的一个直接放到第一个数组的末尾,此时必须要求a数组的空间大小能够同时填充a数组和b数组的有效元素,然后依次比较两个数组元素的大小即可。代码实现:#include <bits/stdc++.h>void merge(int *a, int n, int *b, int m) { int i = n-1;/...

2019-11-03 20:50:23 2655 1

原创 二叉树:将二叉树中的所有节点的左右子树进行交换

二叉树遍历的简单应用struct node { int val; node *left, *right;};node *swapSubTree(node *root) { if (!root) return NULL; else { //交换的过程 node *tmp = root->left; root->left = root->right; ...

2019-11-03 19:37:05 4598

原创 单链表:在带头节点单链表中删除(minv, maxv)中的所有节点

链表节点删除,只有标记待删除节点的前驱节点即可;[注]:如果不是带有节点设置一个虚拟节点即可,返回时返回dummy->next。struct node { int val; node *next;};void delInterval(node *head, int minx, int maxx) { if (!head) return head; node *pre = h...

2019-11-03 19:20:44 552

原创 二叉树:计算叶子节点个数

叶子节点的特征:左右孩子均为NULLstruct node { int val; node *left, *right;};int countLeaf(node *root) { if (!root) return 0; else { if (!root->left && !root->right) return 1; return count...

2019-11-03 19:04:05 1486

原创 二叉树:前序与后序、前序与中序以及中序与后序相同、相反的特征

一、前序序列与后序序列1.前序序列和后序序列相同空树或者只有根节点的二叉树2.前序序列和后序序列相反(1)当且仅当二叉树中只有一个叶子节点(2)二叉树的高度和其节点个数相同二、前序序列与中序序列1.前序序列和中序序列相同任意节点没有左孩子节点2.前序序列和中序序列相反(1)任意节点没有右孩子节点(2)三、中序序列与后序序列1.中序序列和后序序列相同任意节点没有右孩子节点...

2019-11-02 07:35:47 28732 4

原创 判断两棵二叉树是否相同

struct node { int val; node *left, *right;};bool isSame(node *a, node *b) { if (!a && !b) return true; if ((!a && b) || (!b && a)) return false; if (a->val == b-&...

2019-11-01 10:04:52 889

八大排序C++代码实现

冒泡排序 选择排序 插入排序 基数排序 希尔排序 归并排序 堆排序 快速排序的C++的代码实现,可以作为模板使用,是互联网企业面试的必备技能

2020-11-14

常用的数据结构树算法代码总结

本文档总结了常用的数据结构中的树算法代码.包含常见的遍历算法(递归与非递归等),dfs,bfs的实现以及其广泛的应用

2020-01-01

LinkedListProblems.pdf

斯坦福大学整理的18个链表的相关问题,包括各类型的链表的问题。对于面试算法有很大的帮助,唯一的不足是pdf文档为全英文,需要一定的英语阅读能力。

2019-10-29

Effective C++中文第三版高清

C++经典必读书籍之一,整本书的知识点全面细致,每一个mudule都有理有据,常常会触发自己思考一些没有想过的问题。C++的功能多,实现复杂,只是学习语法只会纸上谈兵,而《Effective C++》去理解C++程序的设计原理、应用方法、陷阱可以.加深了对计算机,编程的理解和认识。

2018-08-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除