算法与数据结构
文章平均质量分 63
算法训练思维能力,不为算法而算法!
大卫不加班
不会做饭的厨师不是好程序员!
展开
-
布隆过滤器
什么是布隆过滤器??用于:百分百正确判断 存在某元素不在集合中有概率误判 元素在集合中描述:是将元素映射到二进制位上,对于待检测的元素,可以检测映射到的二进制位是否都为1,如果不都为1,这表明这个元素一定不存在次集合中如果全为1,这表明可能存在此集合中。下图中:x,y,z都是可能在集合中的w是肯定不在集合中与缓存对比布隆过滤器(可以过滤掉所有不可能有结果的请求):比如现在需...原创 2019-03-26 22:17:23 · 219 阅读 · 0 评论 -
LRU cache简易实现
1. 什么是LRU cache?就是一种缓存,算法思想是:将最近访问的数据挪动到头部,如果下次还是访问这个数据,那么就能在靠前的位置访问到这点其实是运用了时间局部性原理:最近一次访问的位置,下一次也很可能访问2. 实现思路:使用双向链表使用哨兵节点,pre 指向尾节点,next 指向头结点插入操作:push(1,先查找,如果有,挪动到头部2,如果没有,检查cache 是否到达大容量,...原创 2019-03-29 10:09:13 · 511 阅读 · 0 评论 -
堆排序算法实现
堆排序:结构逻辑上是完全二叉树,但是可以使用顺序存储来实现一些二叉树的区别:二叉树:度数最大为2并且每个子树也是二叉树满二叉树:每层节点都是满的,没有空缺,也就是,叶子节点只能出现在最后一层完全二叉树:限制条件比满二叉树弱化,只需要前k-1层是复合满二叉树结构,最后一层的叶子节点都靠左排列,右侧可以出出现连续缺失(一个学序列可以按照编号一一对应上满二叉树的节点编号)排序二叉树: 二...原创 2019-03-10 14:35:06 · 5255 阅读 · 0 评论 -
大数乘法
给定两个长度不限的数字字符串,求乘积.思路:如果是让你手算,你一定会列竖式,然后数字a的每一位去乘数字b的每一位,而且还都是从最低位开始.那么代码也可以模仿这一过程.比如:输入 “123” “20”那么计算竖式应该是这样: 1 2 3 2 0 1*0 2*0 3*0 2*1 ...原创 2019-03-03 21:10:24 · 321 阅读 · 0 评论 -
topK问题分析与实现
一,什么是topK问题?一组数据中,需要找出前k大(小)的数据二,思路分析:以前k小为例思路1:先排序再输出如果是完全有序,那么输出所求数据很简答了(需要排序,将数据完全排序)思路2:基于快排,分片,不完全排序使用快排思想,不断分片,左侧是比基准小的元素,右侧是比基准大的元素, 令 index=基准元素下标a, index<k 说明第k小元素...原创 2018-09-08 11:25:18 · 2416 阅读 · 0 评论 -
一个计算器,只能乘2和减1
现有一个奇葩的计算器,只能执行乘2和减1操作,现在给定任意两个数字m,n,其中m,n范围是 1<=m,n<=10^9解决方式:分情况讨论:1,m=n 结果为02,m>n 结果为 m-n3,m<n 3.1 m<2*n-1 m-=1 3.2 m>=2*n-1 m*=2c++代码实现:1,循环实现int...原创 2018-09-03 21:47:46 · 2563 阅读 · 0 评论 -
二叉树学习(三)哈夫曼树
先来看一个例子:如果需要传输 一串文本:abcdaabbbc(假设是ascii码)一个英文字符是 1个字节,那么这里需要1018=80bit(80位来表示)能否使用某种编码,来减少位的使用,节省空间呢?比如 高频率出现的字符使用较少的位来表示低频率出现的字符可以使用相对较多的字符来表示哈夫曼编码就是这个思想.统计其中字符出现的次数字符次数频率a33/...原创 2019-02-28 12:51:40 · 324 阅读 · 0 评论 -
二叉树学习(二) BST插入,查找与删除
二叉排序树定义:大小关系:左孩子大于根大于右孩子 的二叉树特点:中序遍历得到有序序列(升序)节点的删除:无论是什么情况,都需要保证删除后的中序遍历结果仍然是有序比如删除前;a,b,c,d,e,f如果删除c:需要保证删除c后,得到的中序遍历是a,b,d,e,f删除大体分三种情况:待删除节点无孩子(待删除节点是叶子节点),只需要将父节点将对应指针域置为null待删除节点有一个孩子(左...原创 2019-02-16 20:08:07 · 299 阅读 · 1 评论 -
使用栈寻找迷宫通路
问题描述:给定一个n*n的迷宫矩阵,障碍物记为1,无障碍记为0int[][] map = new int[][]{{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},{1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1},{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1},{1, 1, 1, 0, 0, 1, 1, 1, ...原创 2019-01-28 11:24:10 · 673 阅读 · 0 评论 -
字符串匹配算法kmp
问题:给定原串origin,求target 串在原串第一次出现的位置,若不存在,输出-1例如: origin:abcdeftarget:bc输出:1朴素算法最直观的思路(朴素算法):取target的首元素与origin的首元素比较,如果相同,执行2两个字符相同,继续比较两个串的下一个元素如果出现元素不同3.1 如果上一个元素是匹配的(也就是当前比较的不是target串的首字符)...原创 2019-01-26 21:33:49 · 244 阅读 · 0 评论 -
全排列的打印
题目:给定几个不重复数字,请输出全排列示例:1,2,3输出:1,2,31,3,22,1,32,3,13,2,13,1,2思考:给定的字符是1,2,3,…n全排列会允许任一字符能到达任一位置比如:1,2,3如果固定 1为第一个字符,则需要对 2,3 进行全排列如果固定 2为第一个字符,则需要对 1,3 进行全排列(为什么不是3,1被?这里是将1与2位置交换,方便思考,以免混乱...原创 2019-01-25 21:47:53 · 1547 阅读 · 0 评论 -
排序算法之冒泡,选择,插入,快排
例如:待排序序列 5,4,3,7,2,7,(目的是升序排列) 1.冒泡排序:排n趟,每趟只是将原序列变得相对有序,随着趟数的增加,有序性也得到提升,最终完全有序 5,4,3,7,2,7第一趟,5>4,交换---》 4,5,3,7,2,7 5>3 ,交换---》 4,3,5,7,2,7 5<...原创 2018-08-12 16:05:38 · 716 阅读 · 0 评论 -
数据结构之查找
常见查找算法顺序查找二分查找索引查找hash查找关键字:可能重复次关键字:唯一查找表:顺序查找:空间复杂度:o(1)时间复杂度:最好:o(1)最坏:o(n)平均:o(n)如果已知概率,可将大概率数据放在靠前,以减少平均查找长度折半查找:有序表:顺序表中的记录按照关键字值有序时间复杂度:log(n)以深度为h的满二叉树为例,即n=2h−1 n=2^h-1n=...原创 2019-01-15 16:03:45 · 728 阅读 · 0 评论 -
算法学习之字典树实现(leetcode 208)
何为字典树?比如查询单词,hello那么可以通过 前缀 h 缩小范围确定h 后再通过e 进一步缩小范围,知道最终找到hello 这个单词字典树的示意图,来一个:有啥用呢?图中的四角星表示存在以该字母结尾的单词。每个节点可以有26个子节点只需要在插入时给每个节点计数+1 ,那么就可以很容易统计出 以当前节点结尾的前缀的单词个数class Trie { static ...原创 2019-09-13 18:57:31 · 212 阅读 · 0 评论