![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 85
兔老大RabbitMQ
我是全站最硬核博主。我话讲完,谁赞成,谁反对?
展开
-
手把手写算法(学个语言)
希望继续对我的书提建议原创 2022-09-19 15:17:34 · 5219 阅读 · 19 评论 -
动态规划经典入门
准备写本书原创 2022-09-16 09:36:38 · 11634 阅读 · 40 评论 -
博弈论经典入门
是经济学的一个分支,主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。,又因为奇数台阶全0的情况是留给后手的,因此先手总是可以将石子移动到地面,当将最后一个(堆)石子移动到地面时,后手无法操作,即后手失败。有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。原创 2022-09-13 10:58:21 · 19466 阅读 · 0 评论 -
超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?原创 2021-04-20 10:56:04 · 116905 阅读 · 540 评论 -
超硬核!小白读了这篇文章,就能在算法圈混了
作为一只超级硬核的兔子,从来不给你说废话,只有最有用的干货!这些神级算法送给你目录第一节1.1bogo排序1.2位运算1.3打擂台1.4morris遍历第二节2.1睡眠排序2.2会死的兔子2.3矩阵快速幂2.4摔手机/摔鸡蛋时空复杂度目录二分尝试较优的策略归纳表达式写出暴力递归改为动态规划压缩空间四边形不等式优化换一种思路最优解测试:第三节3.1斐波那契之美3.2桶排序3.3快速排序...原创 2021-03-29 10:27:15 · 31722 阅读 · 85 评论 -
超硬核!数据结构学霸笔记,考试面试吹牛就靠它
上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。原创 2021-03-26 11:48:34 · 49920 阅读 · 112 评论 -
不骗你,没读这一篇,你不可能懂二分
上篇文章讲动态规划获得了80k浏览,这次的二分也值得你们一看,这个系列是特别用心准备出书的哦原创 2021-03-22 10:40:19 · 19320 阅读 · 66 评论 -
超硬核!躺进BAT以后我总结了出现最多的15道数组题
作为一个硬核作者,绝不和你扯废话,干货无套路送你题目一: 给定一个数组arr,求出需要排序的最短子数组长度要求: 时间o(n),空间o(1)思路: 有序的数组中,任意一个数字,一定小于左边的数大于右边的数。 我们找到的需要排序的子数组,显然是比右边最小的值大,或比左边最大的值小。 我们初始化变量noMinindex=-1;从右往左遍历,记录经过的最小值为min,若当前数大于min,说明,如果要有序,min一定要放 在当前数左边,我们...原创 2021-03-18 07:30:52 · 12497 阅读 · 39 评论 -
那个谷歌的网红扔鸡蛋的题,来看看教科书式的回答
leetcode顶级难题,谷歌面试天天问,来看看吧,带你来一步一步达到最优解。谷歌不知道问了多少遍,蓝桥杯也出现过,leetcode上是顶级难题,到底是什么题能如此频繁地出现?我们一探究竟吧。原题描述:x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试...原创 2021-03-17 10:35:04 · 15534 阅读 · 69 评论 -
算法题的输入大总结
本文以求和为例多组输入,每组输入共一行,包括两个整数A, BSample Input1 212 24400 500Sample Output336900import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) {原创 2021-03-15 00:31:08 · 12323 阅读 · 49 评论 -
leetcode设计链表,非常工整的实现你值得拥有
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为val的节点。插入后,新节点将成为链表的...原创 2021-03-07 17:14:31 · 10167 阅读 · 37 评论 -
《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
3. 数组中重复的数字题目链接牛客网题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。Input:{2, 3, 1, 0, 2, 5}Output:2解题思路要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第 i 个位置转载 2020-07-26 12:09:51 · 11135 阅读 · 118 评论 -
俄罗斯方块(C++)
#include<iostream>#include<stdlib.h>#include<windows.h>#include<time.h>#include<conio.h>using namespace std;#define A1 0//A代表长条型,B为方块,C为L型,D为闪电型(实在无法描述那个形状)#define A2 1#define B 2#define C11 3#define C12 4#defin.原创 2020-05-31 17:16:01 · 2966 阅读 · 41 评论 -
【精品计划 附录2】- 算法分析
数学模型1. 近似2. 增长数量级3. 内循环4. 成本模型注意事项1. 大常数2. 缓存3. 对最坏情况下的性能的保证4. 随机化算法5. 均摊分析ThreeSum1. ThreeSumSlow2. ThreeSumBinarySearch3. ThreeSumTwoPointer倍率实验数学模型1. 近似N3/6-N2/2+N/3 ~ N3/6。使用 ~f(N) 来表示所有随着 N 的增大除以 f(N) 的结果趋近于 1 的函数。2. 增长..原创 2020-05-31 17:06:26 · 13205 阅读 · 80 评论 -
【精品计划2】你确定真的懂二分查找吗?带你真正入门二分
3.1 经典二分问题经典二分问题:给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9。输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-...原创 2023-11-13 11:11:16 · 22775 阅读 · 211 评论 -
三个博弈基础
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个...原创 2020-01-25 22:07:39 · 3406 阅读 · 37 评论 -
数论基础代码合集
欧几里德#include<iostream>using namespace std;int hcf(int a,int b){ int r=0; while(b!=0) { r=a%b; a=b; b=r; } return(a);}lcd(int u,int v,int...原创 2020-01-25 22:07:09 · 5103 阅读 · 36 评论 -
《盘点那些秀你一脸的秒天秒地算法》(4)
防止新手错误的神级代码#define ture true#define flase false#difine viod void#define mian main#define ; ;以后有新手问题就把这几行代码给他就好啦。不用额外空间交换两个变量a=5b=8#计算a和b两个点到原点的距离之和,并且赋值给aa=a+b#使用距离之和减去b到原...原创 2019-12-17 15:57:56 · 15395 阅读 · 90 评论 -
《盘点那些秀你一脸的秒天秒地算法》(3)
斐波那契之美斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。这个数列就是1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3...原创 2019-12-17 14:48:42 · 8337 阅读 · 54 评论 -
《盘点那些秀你一脸的秒天秒地算法》(1)
本系列坚持格式:1个抖机灵算法+2个较简单但是天秀的算法+1个较难天秀算法。bogo排序Bogo排序(Bogo-sort),又被称为猴子排序,是一种恶搞排序算法。将元素随机打乱,然后检查其是否符合排列顺序,若否,则继续进行随机打乱,继续检查结果,直到符合排列顺序。Bogo排序的最坏时间复杂度为O(∞),一辈子也不能输出排序结果,平均时间复杂度为O(n·n!)。这让我想到了另...原创 2019-12-16 21:15:17 · 17304 阅读 · 124 评论 -
大数加减乘
如标题,不解释。加#include<stdio.h>#include<string.h>int main(){ char a[1000],b[1000]; int i,s[1000],len1,len2,len,j; while(scanf("%s%s",a,b)!=EOF) //用字符数组来储存数 { fo...原创 2019-12-05 14:44:03 · 2508 阅读 · 0 评论 -
OJ汇总
国内:(一下排名不分先后) 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 同济大学(TJU):http://acm.tongji.edu.cn/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 浙江工商(Zjgsu):http...转载 2019-12-04 15:46:20 · 2782 阅读 · 14 评论 -
KMP+DP1
Description求一个字符串的所有前缀在串中出现的次数之和Input多组用例,每组用例占一行为一个长度不超过100000的字符串,以文件尾结束输入Output对于每组用例,输出该字符串的所有前缀在串中出现的次数之和,结果模256Sample InputaaaababSample Output66Solution首先我们知道next数组中next[i]...原创 2018-09-20 17:08:40 · 3044 阅读 · 0 评论 -
博弈论基础
博弈论总结什么是博弈论:多人进行博弈,假设每个人都采取最优策略,一定有一个人胜出,在知道初态及规则的情况下,求解出何人胜出的一类问题的理论及方法。博弈论的一些性质P点:必败点,N点:必胜点(1)无法进行任何移动的局面(也就是terminal position)是P-position;(2)可以移动到P-position的局面是N-position;(3)所有移动都导...原创 2019-10-22 19:16:53 · 4959 阅读 · 0 评论 -
搜索详解
搜索一.dfs和bfs简介深度优先遍历(dfs)本质:遍历每一个点。遍历流程:从起点开始,在其一条分支上一条路走到黑,走不通了就往回走,只要当前有分支就继续往下走,直到将所有的点遍历一遍。剪枝:如果已经确定这条路没有我们想要的答案,那么就不用继续在这条路上走下去了,于是我们就开始走其他的分支或者往回走,这样节省时间的方法称之为剪枝。回溯:当我们一条路走到头,往回走时,就叫做回溯...原创 2019-10-21 17:43:58 · 4455 阅读 · 2 评论 -
何为布隆过滤器
问题的提出我们有一个不安全网页的黑名单,包含了100亿个黑名单网页的URL,每个网页URL最多占用64B.。现在我们要设计一个网页过滤系统,这个系统要判断该网页是否在黑名单里,但是我们的空间有限,只有30GB.允许有万分之一的判断失误布隆过滤器我们可以把所有的URL保存起来,比如放到hashmap里,但是64B*100亿=640GB,不符合要求。布隆过滤器(Bloom Fi...原创 2019-06-15 21:42:25 · 5828 阅读 · 40 评论 -
树状数组维护区间和的模型及其拓广的简单总结
by wyl8899 树状数组的基本知识已经被讲到烂了,我就不多说了,下面直接给出基本操作的代码。假定原数组为a[1..n],树状数组b[1..n],考虑灵活性的需要,代码使用int *a传数组。#define lowbit(x) ((x)&(-(x)))int sum(int *a,int x){ int s=0; for(;x;x-=lo...原创 2019-07-31 15:06:13 · 3138 阅读 · 1 评论 -
redis——事件
redis服务器是一个事件驱动程序。需要处理两类事件:1)文件事件:redis是通过套接字与客户端或者其他服务器连接的,而文件事件就是服务器对套接字操作的抽象。2)时间事件:服务器对一些定时操作的抽象。文件事件redis基于reactor模式开发了自己的网络事件处理器,这个处理器被称作文件事件处理器,它使用IO多路复用程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套...原创 2019-06-11 16:54:59 · 3173 阅读 · 27 评论 -
AVL Tree
前言 希望读者了解二叉搜索树了解左旋右旋基本操作https://blog.csdn.net/hebtu666/article/details/84992363直观感受直接到文章底部,有正确的调整策略动画,自行操作。二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子...原创 2018-12-18 10:29:19 · 13117 阅读 · 73 评论 -
树状数组实现
树状数组能够完成如下操作:给一个序列a0-an计算前i项和对某个值加x时间o(logn)注意:有人觉得前缀和就行了,但是你还要维护啊,改变某个值,一个一个改变前缀和就是o(n)了。线段树树状数组的题就是这样,维护一个树,比较容易看出来。线段树:https://blog.csdn.net/hebtu666/article/details/826910...原创 2018-09-13 18:23:57 · 3175 阅读 · 3 评论 -
借助桶排序思想完成的一道题
问题:数组排序之后的相邻数的最大差值;嗯,你可以排序,然后找相邻的最大差值。但是你觉得这么简单我写他干啥。最优解:时间复杂度O(N),空间O(1)那我们开始说这种方法:1)遍历所有数,找到最小值和最大值:min和max2)设数组长度为n,我们准备n+1个桶3)把max放进最后一个桶里,min放到第一个桶里4)每一个桶都负责放一个范围内的数...原创 2019-06-14 18:49:02 · 4627 阅读 · 2 评论 -
多校一道KMP+DP的题
难啊,多校当时根本不会做题目描述White Cloud has a rectangle carpet of n*m. Grid (i,j) has a color colorA[i][j] and a cost costA[i][j].White Rabbit will choose a subrectangle B of p*q from A and the color of ea...转载 2019-06-14 18:12:55 · 2923 阅读 · 27 评论 -
链表相交问题
本来想自己写,写了一半发现一篇文章,解释写得简单易懂,我就直接拿过来了。这个问题值得反复地写,锻炼链表coding能力的好题。 //如果两个链表都不带环int NotCycleCheckCross(pLinkNode head1,pLinkNode head2){ pLinkNode list1 = head1->next; pLinkNode l...转载 2018-10-10 13:01:16 · 3653 阅读 · 0 评论 -
线性表表示集合
集合我们高中都学过吧?最重要的几个特点:元素不能重复、各个元素之间没有关系、没有顺序集合内的元素可以是单元素或者是集合。对集合的操作:交集并集差集等,还有对自身的加减等。需要频繁的加减元素,所以顺序存储效率较低,但是我们还是说一下是怎么实现的: 用01向量表示集合,因为现实中任何一个有穷集合都能对应到一个0、1、2.....n这么一个序列中。所以可以对应过来,每位的01代...原创 2018-10-10 11:09:55 · 4266 阅读 · 0 评论 -
线性表实现一元多项式操作
数组存放:不需要记录幂,下标就是。比如1,2,3,5表示1+2x+3x^2+5x^3有了思路,我们很容易定义结构typedef struct node{ float * coef;//系数数组 int maxSize;//最大容量 int order;//最高阶数}Polynomial;先实现求和:我们想求两个式子a+b,结果存在c中。逻辑...原创 2018-10-09 16:34:19 · 5683 阅读 · 0 评论 -
单调队列优化的背包问题
对于背包问题,经典的背包九讲已经讲的很明白了,本来就不打算写这方面问题了。但是吧。我发现,那个最出名的九讲竟然没写队列优化的背包。。。。那我必须写一下咯嘿嘿,这么好的思想。我们回顾一下背包问题吧。01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总...原创 2018-10-12 12:18:41 · 11485 阅读 · 106 评论 -
双栈
利用栈底位置相对不变的特性,可以让两个顺序栈共享一个空间。具体实现方法大概有两种:一种是奇偶栈,就是所有下标为奇数的是一个栈,偶数是另一个栈。但是这样一个栈的最大存储就确定了,并没有起到互补空缺的作用,我们实现了也就没有太大意义。还有一种就是,栈底分别设在数组的头和尾。进栈往中间进就可以了。这样,整个数组存满了才会真的栈满。 那我们直接开始代码实现 首先定义结构体:...原创 2018-10-11 13:46:24 · 6425 阅读 · 21 评论 -
并查集入门三连:HDU1213 POJ1611 POJ2236
HDU1213http://acm.hdu.edu.cn/showproblem.php?pid=1213问题描述今天是伊格纳修斯的生日。他邀请了很多朋友。现在是晚餐时间。伊格纳修斯想知道他至少需要多少桌子。你必须注意到并非所有的朋友都互相认识,而且所有的朋友都不想和陌生人呆在一起。这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,那意味着A,B,C彼此了解,所以他们可以留在...原创 2018-09-25 16:02:06 · 3326 阅读 · 0 评论 -
栈/队列 互相模拟实现
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:大概这么想:用一个辅助栈把进第一个栈的元素倒一下就好了。比如进栈1,2,3,4,5第一个栈:54321然后倒到第二个栈里12345再倒出来,顺序为1,2,3,4,5实现队列然后要注意的事情:1)栈2非空不能往里面倒数,顺序就错了。栈2没数...原创 2018-09-17 15:58:46 · 5436 阅读 · 30 评论 -
双端单调队列
上次我们介绍了单调栈结构https://blog.csdn.net/hebtu666/article/details/82717317这次介绍一种新的数据结构:双端队列:双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。堆栈、队列和优先队列都可以采用双端队列来实现本文介绍单调双端队列的原理及应用。...原创 2018-09-16 10:16:51 · 5032 阅读 · 0 评论