数据结构和算法
Tony_Xian
这个作者很懒,什么都没留下…
展开
-
树数据结构
https://github.com/whq703/DataStructure转载 2021-01-06 10:22:43 · 115 阅读 · 0 评论 -
队列解决约瑟夫环
普通队列:func Ring(n, m int) int { if n == 0 { return -1 } if n == 1 { return 0 } queue := make([]int,n) for i := 0; i < n; i++ { queue[i] = i } count := 1 for len(queue) > 1 { if count == m { count = 1 queue = queue[1:] } els原创 2020-10-21 10:42:23 · 289 阅读 · 0 评论 -
二分查找三种模式
func binarySearch(nums []int, target int) int { //var left, right = 0, len(nums) - 1 var left int =0 var right int = len(nums) - 1 for left <= right { mid := (left+right) >> 1 if nums[mid] == target { return mid } else if nums[mid] &.原创 2020-07-13 16:09:22 · 209 阅读 · 0 评论 -
剑指offer go版本
https://www.cnblogs.com/dubinyang/p/12129922.html转载 2020-05-23 12:50:26 · 310 阅读 · 0 评论 -
什么是A*寻路算法
https://www.sohu.com/a/191037466_478315转载 2020-05-17 22:59:16 · 230 阅读 · 0 评论 -
生成5个随机数且和为100
void RandomNum(){ std::vector<int> vec; int sum = 100; srand((int)time(0)); for (int i = 0; i < 4; i++) { int random = rand() % 100; while (random + 5 - i - 1 > sum) { random = rand() % 100; } sum -= random; vec.push_back(.原创 2020-05-10 19:41:21 · 2537 阅读 · 0 评论 -
排序数组二分插入
void BinaryInsert(vector<int>& A, int value){ int left = 0; int right = A.size() - 1; int mid = left + ((right - left) >> 1); while (left <= right) { if (A[mid] > value) right = mid - 1; else if (A[mid] < value) le.原创 2020-05-10 00:21:30 · 303 阅读 · 0 评论 -
判断二叉搜索树的方法(C++实现)
bool isBST(TreeNode *root){ TreeNode *prev; if(root != NULL) { if(!isBST(root->left)) return false; if(prev != NULL && root->data < prev->...原创 2020-05-06 21:24:03 · 445 阅读 · 0 评论 -
WheeelTimer定时器
WheelTimer定时器定时器一开始将当前时间(厘秒)赋值给current_每隔一小时段时间update一次,取自开始以来的运行时间interval=now-currend_(实际上就是jiffies_的值,jiffies_在每个tick都会自增一次)定时器将数字划分为[0,429496729)的五个区域,[0,256)[256,16384)[16384,1048576)[104...原创 2020-03-26 10:42:59 · 218 阅读 · 0 评论 -
字符串BM算法
坏字符规则:generateBadChar(b,m,hash); //构建坏字符哈希表,对应字符在模式串中的位置,如相同则靠最右 for(j = m -1; j >= 0; --j) //模式串从后往前匹配 { if(a[i+j] != b[j]) break; //坏字符对应模式串中的下标是j ...原创 2020-02-10 13:42:43 · 161 阅读 · 0 评论 -
把一个数组中的0全部移到数组的最后边或者数组的最前边
把所有为0的数移到数组的最后边思想:从前往后遍历一遍数组,将数组中的零全部用一个整型变量 ZeroNum记录下来,当碰到一个非零的数据,就让这个数向前移动ZeroNum个单位,即arr[i-ZeroNum] = arr[i]; 把数组遍历完成之后,为0个个数就全部统计出来了,那么就将数组的后ZeroNum个位置全都改为0即可代码如下:时间复杂度:O(n),空间复杂度:O(1)voi...转载 2020-01-12 23:09:44 · 2611 阅读 · 0 评论 -
设计一个Cache系统 【双向链表+哈希表】
今天去面试,面试官让我设计一个cache系统,要求保证最近使用的数据不能被移除出cache,也就是每次添加一个cache项的时候,把最旧的cache项移除出去。 我只记得操作系统里貌似有个差不多的cache算法,记不起名字来,更别提数据结构了。一开始我执着于用一种数据结构来实现,可是每说出一种,都被面试官指出这种方式的不足。最后终于开窍了,想出了 哈希表+双向链表 的方法。当时也不知道到...转载 2020-01-09 21:21:19 · 149 阅读 · 0 评论 -
[Leetcode] LRU Cache. 哈希表+双向链表之实现
题目首先来看题目,就是实现一个LRU,最近最少使用。Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.get(key) - Get the value (will always ...转载 2020-01-09 21:15:03 · 412 阅读 · 0 评论 -
二叉查找树中搜索区间
转:https://www.jianshu.com/p/e764cf31f55f转载 2019-04-22 00:45:58 · 107 阅读 · 0 评论 -
红黑树修正的处理
红黑树插入修正分析 80(B) 80(B) 80(B) ————>插入20后 —...原创 2019-06-17 01:22:50 · 292 阅读 · 0 评论 -
红黑树的插入
由于插入的节点被着色为红色,以下分三种情况处理1.插入的节点是根节点,则直接将根节点着色为黑色2.插入的节点的父节点是黑色,则不用处理,直接是红黑树3.插入的节点的父节点是红色,会违背红黑树的性质(5),该节点一定存在非空祖父节点(因为插入的节点和父节点均为红色,而红黑树的根节点必须为黑色,故插入的节点一定存在非空祖父节点)。也一定存在叔叔节点(祖父节点的另一个子节点),尽管叔叔节点可...原创 2019-03-06 14:27:27 · 96 阅读 · 0 评论 -
删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { ...转载 2019-02-07 13:22:04 · 101 阅读 · 0 评论 -
链表中环的入口结点
一个链表中包含环,请找出该链表的环的入口结点。第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。 第二步,找环的入口。接上步,当p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x; n=x;可以看出p1实际走了一个环的步数,再让p2指向链表头部,p1位置不变,p...转载 2019-02-06 14:20:13 · 74 阅读 · 0 评论 -
C++实现数组和链表的排序算法
//使用插入排序对数组进行排序int *get_order(int *num, int length){ for(int eiter = 1; eiter < length; eiter++) { int temp_value = num[eiter];//把将要插入的值做个标记 int iiter = eiter-1; ...转载 2019-02-05 01:47:08 · 239 阅读 · 0 评论 -
为什么链表可以没有头结点,不能没有头指针
如果有头结点的话,头指针必然指向头结点。头结点是用来存储诸如链表长度之类的信息的,可有可无,而头指针是指向这个链表的地址的关键指针,如果没有它,这个链表就找不到,相当于没创建一样。另外这篇文章写得也很详细,转自:http://blog.csdn.net/zhenyusoso/article/details/6092843...转载 2019-02-04 13:18:47 · 5637 阅读 · 0 评论 -
深入学习理解二叉搜索树(附详细讲解与实例分析)
转:https://blog.csdn.net/qq_21396469/article/details/78419609转载 2019-01-03 09:56:57 · 260 阅读 · 0 评论 -
十大经典排序算法
https://www.cnblogs.com/onepixel/articles/7674659.htmlhttps://zhuanlan.zhihu.com/p/52884590桶排序:https://www.sohu.com/a/259503781_684445计数排序:https://www.sohu.com/a/258882297_478315基数排序...转载 2019-01-07 01:08:47 · 83 阅读 · 0 评论 -
二叉排序树与堆的区别
在二叉排序树中,每个结点的值均大于其左子树上所有结点的值,小于其右子树上所有结点的值,对二叉排序树进行中序遍历得到一个有序序列。所以,二叉排序树是结点之间满足一定次序关系的二叉树; 堆是一个完全二叉树,并且每个结点的值都大于或等于其左右孩子结点的值(这里的讨论以大根堆为例),所以,堆是结点之间满足一定次序关系的完全二叉树。 具有n个结点的二叉排序树,其深度取决于给定集合的初始排列顺序,...转载 2019-01-02 15:19:02 · 451 阅读 · 0 评论 -
时间复杂度
转:https://blog.csdn.net/qq_41523096/article/details/82142747转载 2019-01-01 01:33:16 · 116 阅读 · 0 评论 -
常见数据结构应用场景
通用数据结构可以简单的按照速度将通用数据结构划分为:数组和链表(最慢),树(较快),哈希表(最快)。增、删、改、查是四大常见操作,不过其实可以浓缩为两个操作:增和查。删除操作和和修改操作都是建立在查找操作上的,所以完美的数据结构应该是具有较高的插入效率和查找效率。 通用数据结构关系可以根据下图选择合适的通用数据结构: 数组 使用场景数组在以下三个情形下很有用:1)数...转载 2018-10-06 19:52:58 · 5810 阅读 · 0 评论 -
数据结构-5-链表面试题
https://blog.csdn.net/huangshulang1234/article/details/79876811转载 2018-08-04 12:49:30 · 105 阅读 · 0 评论 -
红黑树
https://www.cnblogs.com/skywang12345/p/3245399.htmlhttps://blog.csdn.net/mmshixing/article/details/51692892https://www.cnblogs.com/skywang12345/p/3245399.html转载 2019-03-04 00:35:13 · 75 阅读 · 0 评论 -
平衡二叉树删除结点的情况
一.找到了要删除的结点1.如果左右子树均不为空,且左子树比右子树高找出结点的左子树中的最大结点将最大结点的值赋值给该结点(左子树的父亲)用结点的左子树的最大结点的值替换要删除的结点的值这样做的用意是,删除结点左子树的最大结点后,AVL树仍然满足二叉搜索树的性质:任意结点的左孩子均不大于根结点,任意结点的右孩子均不小于根结点2.如果左右子树均不为空,且右子树比左子树高...原创 2019-03-04 12:59:12 · 2356 阅读 · 2 评论 -
二叉树最后一个非叶子节点
最后一个叶子节点的索引值是n-1,它的父节点索引值是[(n-1)-1]/2 = n/2 -1转载 2019-03-04 19:29:18 · 5415 阅读 · 1 评论 -
快排的优化
https://www.cnblogs.com/c4isr/p/4603980.htmlhttps://blog.csdn.net/qq_19525389/article/details/81436838转载 2019-05-05 01:17:45 · 621 阅读 · 0 评论 -
golang九宫格
https://github.com/yyhero/gridview/blob/master/gridMgr.go转载 2019-05-02 23:31:47 · 354 阅读 · 0 评论 -
求1,2,3,4全排列的解析
#include <iostream>using namespace std;void swap(int arr[], int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;}void FullSort(int arr[], int start, int end){ ...转载 2019-05-02 12:57:42 · 2781 阅读 · 0 评论 -
二叉树递归与非递归遍历
https://www.cnblogs.com/zl1991/p/6952587.html转载 2019-04-15 00:11:00 · 90 阅读 · 0 评论 -
二叉树的层次遍历
转:https://www.jianshu.com/p/b266db73e9e2转载 2019-04-22 00:46:35 · 98 阅读 · 0 评论 -
寻找链表环的入口
https://blog.csdn.net/puss0/article/details/78462375https://blog.csdn.net/sinat_24048051/article/details/69456947转载 2019-04-08 00:24:16 · 185 阅读 · 0 评论 -
哈夫曼树
https://www.cnblogs.com/DswCnblog/p/5629165.htmlhttps://www.cnblogs.com/QG-whz/p/5175485.htmlhttps://github.com/huanzheWu/Data-Structure/blob/master/Huffman/Huffman/Huffman.h翻译 2019-04-07 19:58:46 · 92 阅读 · 0 评论 -
1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别
1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别1.红黑树和自平衡二叉(查找)树区别 1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。 2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。AVL树是最早出现的自平衡...转载 2019-03-31 21:25:33 · 217 阅读 · 0 评论 -
红黑树
https://blog.csdn.net/SL_World/article/details/84584503https://blog.csdn.net/m0_37589327/article/details/78518324https://www.cnblogs.com/tongy0/p/5460623.html为什么满足上面的颜色约束性质,红黑树能保证最长路径不超过最短路径的...转载 2019-03-18 01:09:10 · 124 阅读 · 0 评论 -
堆排序
#include <iostream>using namespace std;void AdjustHeap(int arr[], int i, int length);void swap(int arr[], int a, int b);void HeapSort(int arr[], int length);int main(){ int array[10]...转载 2019-03-04 19:59:01 · 79 阅读 · 0 评论 -
去BAT,你应该要看一看的面试经验总结
来源微信公众号『easyserverdev』http://mp.weixin.qq.com/s/UZljzFMjobo1wzCguY7NDg 说下我的面试经验吧,都是亲身经历,不喜勿喷:我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理。我...转载 2018-08-04 12:48:47 · 321 阅读 · 0 评论