
刷题
刷题
剑决浮云气
事了拂衣去,深藏功与名
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
逆序一个栈
1.不借助任何额外的数据结构,利用递归函数逆序一个栈代码//获取当前栈的栈底元素 并且把它从当前栈底移除int getReturnLast(stack <int> & a){ int Temp = a.top(); a.pop(); //如果栈空了 说明上面pop出的是最后的一个元素 if(a.empty()) { return Temp; } else { int res = getReturnLast(a); //把前面的压回栈中 a.p原创 2021-08-24 08:51:34 · 164 阅读 · 0 评论 -
KMP算法
#include <bits/stdc++.h>using namespace std;const int N = 10010,M = 100010;char p[N];//存储短的 char s[M];//存储长的int n,m; int Next[N];//短串的next数组 int main(int argc, char** argv) { cin>>n>>p+1; cin>>m>>s+1; //求取next原创 2021-08-23 21:10:57 · 120 阅读 · 0 评论 -
TireTree前缀树
前缀树(Trie),也叫单词查找树典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。它的基本性质如下:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符都不相同。前缀树常用的有如下4个操作:1.插入字符串: void insert(string str)遍历字符串,沿途经过的pa原创 2021-08-20 13:33:43 · 309 阅读 · 0 评论 -
一致性哈希算法原理
博客地址转载 2021-08-19 09:56:37 · 135 阅读 · 0 评论 -
完全二叉树的节点数量
1.题目一棵完全二叉树的节点总数题意:已知一棵完全二叉树,求其节点的个数要求:时间复杂度低于O(N),N为这棵树的节点个数。公式节点个数=2^n-12.思路低于O(N) 那么我们不可能用层序遍历去求解我们可以用满二叉树的计算公式去求解求解完全二叉树的深度int GetLeftHeight(NODE *Head, int Level){ while(NULL != Head) { Level++; Head = Head->Left; } return Lev原创 2021-08-18 09:57:38 · 909 阅读 · 0 评论 -
是否为完全二叉树
1.完全二叉树一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。用人话来说,就是一层一层 必须从左到右依次挂上一个节点,不能跳过。2.思路我们运用层序遍历的思想,用一个队列来作为结构,我们依次从上到下,从左到右。一个节点可能有以下四种情况①左右子树都有 ok 没有任何问题②无左子树 有右子树 这种情况 一看就不是完全二叉树③有左子树 无右子树 那么这种情原创 2021-08-17 20:48:52 · 228 阅读 · 0 评论 -
二叉树的三种非递归遍历
我们都知道递归是我们使用系统帮我们维护了一个栈,非递归你就得自己维护一个stack1.前序遍历 根左右void PreOrder(NODE *Head){ stack<NODE *> s; s.push(Head);//先把头结点压入进去 //当栈不空的时候 while(!s.empty()) { //取出头结点 NODE *pTemp = s.top(); s.pop(); //直接打印 value cout<<pTemp->原创 2021-08-17 20:14:35 · 125 阅读 · 0 评论 -
判断一个树是否是平衡二叉树
1.平衡二叉树树中的任意一个节点,他的左子树和右子树的高度差不超过12. 代码实现/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxDe原创 2021-08-16 19:57:38 · 137 阅读 · 0 评论 -
实现二叉树的序列化和反序列化
1.什么叫二叉树的序列化和反序列化我们在内存中建立起了一颗二叉树,当电脑关机后,内存中的东西又消失了,我们还得自己手工去建立。①把内存中的二叉树存储到文件或其他介质中的过程我们叫序列化②反序列化就是例如根据文件中的字符串的内容,把这个二叉树又重新构造起来。2.二叉树的结构struct NODE{ struct NODE *Left; struct NODE *Right; int Value; NODE(int v):Left(NULL), Right(NULL), Value(v)原创 2021-08-15 10:22:40 · 367 阅读 · 0 评论 -
LeetCode160相交链表
题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。思路如果说两个链表相交的话,那么他们以后的部分一定是等长的。那么我们可以把两个链表从尾部对齐,然后从短的开始看是否相交代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i原创 2021-08-11 11:26:52 · 116 阅读 · 0 评论 -
特殊的栈GetMin
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】1.pop、push、getMin操作的时间复杂度都是O(1)。2.设计的栈类型可以使用现成的栈结构。思路用两个栈 一个叫做data栈 正常存放数据 一个叫做Min栈 存放当前栈中的最小值当一个数进来后,先放入data栈然后让该数和Min栈的栈顶比较①若小于栈顶元素,则将该数压入Min栈成为新的栈顶。②若大于栈顶元素,则将栈顶重复压入原创 2021-01-26 17:45:31 · 167 阅读 · 1 评论 -
固定数组实现一个队列
Start End Size假设固定数组大小为3①start和size之间的约束: 当size为0时,不能取出队头元素,以及出队当size不为0可以②end和size之间的约束:当size小于3时,可以再队尾加入元素,否则不能添加元素注意取余...原创 2021-01-26 17:35:24 · 142 阅读 · 0 评论 -
相邻两数的最大差值
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。解题1.已知数组长度为 N2.遍历数组,找到整个数组中元素的最大值 max 和最小值 min3.最小值放入0号桶,最大值放入N+1号桶根据找到的 max 和 min,将数组均匀划分为 n + 1 个范围。4.遍历数组,根据每个数组元素的值,判断需要进入哪个桶,最后找到每个桶中的最大值和最小值。5.遍历数组 用该数组的最小值-前一个非空桶的最大值,更新全局Max(最大差值)设立N+1个桶的原创 2021-01-26 17:13:07 · 478 阅读 · 0 评论 -
荷兰国旗问题
问题描述给定一个数组a和一个数n,把小于等于n的数字放在数组的左边,大于n的数放在数组的右边,要求额外空间复杂度O(1),时间复杂度O(n)#include <iostream>using namespace std; const int N = 100010;int Arr[N];void Sort(int *p, int nStart, int nEnd, int nFlag);int main(int argc, char** argv) { int nLen;原创 2021-01-25 11:00:26 · 121 阅读 · 1 评论 -
数组分组问题
问题描述给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)#include <iostream>using namespace std; const int N = 100010;int Arr[N];void Sort(int *p, int nStart, int nEnd);int main(int argc, char** argv) {原创 2021-01-25 10:16:11 · 184 阅读 · 0 评论 -
A 1049 Counting Ones (30分)
A 1049 Counting Ones (30分)这道题目我看到后根本没有任何思路,没办法只好一个个数枚举,然后暴力破解,但只通过了部分测试点,想了好久,都没有过,最后去看的《算法笔记》,才看懂了这道题.这道题我感觉要我自己做的话,我估计到死都不会AC的.毕竟太菜了.**题目大意:**首先给你一个数,然后让你判断从0到这个数中共有多少个1.举一个例子来分析 48210这...原创 2020-03-01 21:34:33 · 217 阅读 · 0 评论