数据结构
文章平均质量分 55
雨浅听风吟
这个作者很懒,什么都没留下…
展开
-
反转链表-思路整理
现在有个链表如下a->b->c->d->e->nullptr我要将它反转选取中间情况nullptr<-a<-b<-c d->e->nullptr这里我们要知道要完成反转目前的cur节点是d ,pre节点是c,我们要做的就是cur节点指向c而不是指向e,为了避免链表在d和e处断开,我们需要保存cur->next节点。这里要做的就是创建pre cur next三个节点,然后cur.next=pre ,pre=cur ,cur=cur.ne原创 2022-04-24 20:03:34 · 634 阅读 · 0 评论 -
常见数据结构-学习笔记
文章目录前沿数组链表栈队列树图散列表堆前沿原文地址作者:Krahets链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/50e446/来源:力扣(LeetCode)如下图所示,常见的数据结构可分为「线性数据结构」与「非线性数据结构」,具体为:「数组」、「链表」、「栈」、「队列」、「树」、「图」、「散列表」、「堆」。数组数组是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变。如下图所示,构建此数组原创 2022-02-10 17:52:04 · 89 阅读 · 0 评论 -
leetcode排序算法-学习笔记
文章目录1简介稳定性:就地性:自适应性:2冒泡算法2.1算法简介2.2效率优化3 快速排序3.1 算法解析3.2算法特性3.3 算法优化Tail Call :随机基准数:practise剑之40 最小k个数冒泡算法--超出时间限制快速排序1简介稳定性:根据 相等元素 在数组中的 相对顺序 是否被改变,排序算法可分为「稳定排序」和「非稳定排序」两类。「稳定排序」在完成排序后,不改变 相等元素在数组中的相对顺序。例如:冒泡排序、插入排序、归并排序、基数排序、桶排序。「非稳定排序」在完成排序后,相等素原创 2022-02-09 17:40:44 · 1386 阅读 · 0 评论 -
数组
1数组简介include <iostream>int main() { // 1. Initialize int a0[5]; int a1[5] = {1, 2, 3}; // other element will be set as the default value // 2. Get Length int size = size...原创 2020-04-21 21:47:36 · 121 阅读 · 0 评论 -
栈-先入后出的数据结构
文章目录概念练习1栈和DFSDFS模板概念练习1155最小栈栈和DFSDFS模板当我们递归地实现 DFS 时,似乎不需要使用任何栈。但实际上,我们使用的是由系统提供的隐式栈,也称为调用栈(Call Stack)。...原创 2020-04-21 09:46:20 · 1027 阅读 · 0 评论 -
队列和BFS
文章目录广度优先搜索模板练习题广度优先搜索模板之前,我们已经介绍了使用 BFS 的两个主要方案:遍历或找出最短路径。通常,这发生在树或图中。正如我们在章节描述中提到的,BFS 也可以用于更抽象的场景中。模板1** * Return the length of the shortest path between root and target node. */int BFS(Nod...原创 2020-04-20 13:25:01 · 213 阅读 · 0 评论 -
队列-先入先出的数据结构
文章目录1数据结构2队列实现2.1缺点3循环队列4设计循环队列1数据结构2队列实现为了实现队列,我们可以使用动态数组和指向队列头部的索引。如上所述,队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。这是一个供你参考的实现:#include <iostream>class MyQueue { ...原创 2020-04-11 18:13:07 · 259 阅读 · 0 评论 -
设计哈希表
文章目录1哈希表原理2设计哈希表的关键2.1哈希函数2.2冲突解决3设计哈希集合4设计哈希映射哈希表是一种数据结构,它使用哈希函数组织数据,以支持快速插入和搜索。在本文中,我们将简要说明哈希表的原理。1哈希表原理哈希表的关键思想是使用哈希函数将键映射到存储桶。更确切地说,当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中;当我们想要搜索一个键时,哈希表...原创 2020-04-04 20:24:36 · 1165 阅读 · 0 评论 -
贪心算法
贪心算法换零钱,用贪心算法,这里刚好设计比较合理,如果设计不合理也许就不是最佳解法。比如18用面纸10和9和1的面纸来匹配,贪心会一张10和8张1,但其实两张9就可以贪心算法的要求...原创 2020-03-17 16:32:59 · 96 阅读 · 0 评论 -
树,二叉搜索树,二叉树,图
上图是链表,如果我们想访问中间的某个节点,必须从头节点一个一个往后看,这时想出来next指向两个节点分别叫左节点,右节点。原创 2020-02-23 11:25:28 · 243 阅读 · 0 评论 -
映射(Map)&集合(Set)(hashtable)
文章目录Hash Functionlist vs map vs setHash Functionhash函数和hash表常要解决如下问题,加入一个班级有三十个学生,他们名字就是各个英文的名字,然后把三十个学生的名字放到一个表里去,怎么把不同的人放到不同的位置,以让你更快的找到人。若是放在数组就不容易找,比如问jack在哪,只能从数组最开始线性的找,那么能否用O(1)的方式来查找。可以用H...原创 2020-02-19 13:25:27 · 308 阅读 · 0 评论 -
广度优先搜索
为什么需要这些优先搜索,因为要在一个大的集合找到我们要的元素,有可能是一些状态集也可能是树和图。广度优先搜索的原理是以根节点为起点,每一次扩散出去一波,就像在根节点滴了一滴水滴,然后一层一层扩散。把1开始儿子节点依次加入队列里去,队列中是先入先出,结果1先进去,然后2,3,4进去,然后依次取2的儿子5,3的儿子6、7,4的儿子8。...原创 2020-02-19 10:40:49 · 213 阅读 · 0 评论 -
优先队列(priority queue)
priorityQueue 优先队列正常入优先级出优先队列实现机制堆( 二叉堆,多项式堆,斐波那契堆)二叉搜索树mini heap(小顶堆)父亲节点比左孩子右孩子都要大。最小元素一直在堆顶,加入后会对整个进行调整每个根节点都要大于左孩子右孩子二叉堆性能较差,所有元素找到最小元素是O(1),但在合并插入删除时候就变成了指标,黄色表示效率一般,红色较差。python中堆的包是严...原创 2020-01-01 21:39:53 · 260 阅读 · 0 评论 -
数组&链表-手写一个链表并反转
数组数组内连续的存储区域,有图只是示意,现实64位复杂的多,还有虚拟内存和寻址算法。(可以看计算机组成原理-操作系统)。你只要知道它的下标,查找只要一次操作就可以完成因此是O(1)的查找。改变元素有插入和删除操作插入D要移动EFG后面所有元素因此是O(n)时间复杂度如果插入最后一个确实是O(1),第一个就是O(n),平均就是(n+1)/2因此就是O(n)时间复杂度,看平均的。删除类似...原创 2019-10-27 17:53:02 · 483 阅读 · 0 评论 -
知识总结2
self本身就是类就是类,这里可以new一个node练习和切题原创 2019-10-27 14:54:10 · 83 阅读 · 0 评论 -
知识总结
现实生活中的算法问题代码模块所有递归原创 2019-10-27 14:46:11 · 91 阅读 · 0 评论 -
布隆过滤器Bloom Filter
文章目录概念原理案例比特币(Redis(缓存)vsbloomfilter)分布式系统(Map-Reduce)概念filter和cache互补可以看出产生冲突,在02这个位置变成一个数组或链表,变成链表就叫拉链法解决hash冲突。这里误识别率是当他判定一个元素在这个集合中,他有一定错误概率,判断不在是100%正确。原理如下图x,y,z映射到不同二进制位,x3条蓝色的,y也标为1。新来...原创 2019-10-27 11:55:26 · 178 阅读 · 0 评论 -
LRU Cache(pyhton中OrderedDICT的用法)
文章目录cacheLRU Cache缓存替换算法LFU Cacheleetcode146 LRU Cachecache1记忆2钱包-储物柜(容量)3代码模块Core是最小算数逻辑单元ALU其中D-cache最快但最小,其次是I-Cache慢一点但是大一点。L2就更大了,L3最大。有系统描述目前cpu的架构LRU Cache缓存替换算法查中间就不是o(1)了,但是cache...原创 2019-10-25 11:09:57 · 658 阅读 · 0 评论 -
#1.1.2计算给定多项式在给定x值时的值
文章目录1 知识内容2实践2.1 #define2.2代码1 知识内容第二种方法效率更高。发现全是0的错误,这是因为函数跑的太快都不到一个tick,clock函数根本捕捉不到区别2实践2.1 #define1.简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME...原创 2019-06-20 00:31:06 · 1463 阅读 · 0 评论 -
1.2什么是好算法
1案例一下图显示一个递归函数假设内存有一块空间,这个程序可以用 ,N传进来部为0,它递归调用PrintN,传进去99999 ,调用这个函数前要把printN(100000)状态存进内存,执行完在恢复。最后存在系统里的一块内容是PrintN(1) 。它在内存里占用的数量与 N成正比。N大的话,有限的空间爆掉就会非正常退出。循环 只用了零时变量和for循环,没涉及程序调用,不管N多大战友...原创 2019-06-20 23:38:26 · 937 阅读 · 1 评论 -
1.2.3算法复杂度分析
当有一个算法复杂度为n2n^{2}n2下意识的是要将其降为nlogn原创 2019-06-21 23:14:12 · 180 阅读 · 0 评论 -
算法数据结构概述
数据结构䄦算法总结原创 2019-07-30 22:36:20 · 119 阅读 · 0 评论 -
数据结构与算法 堆栈与队列
堆栈堆栈先进后出lst=[]def pop(): if(len(lst)==0): print("栈为空","无法出栈") else: print ("此次出栈元素为:",lst.pop())def push(i): lst.append(i)push(1)push(2)push(3)pop()pop()pop()pop...原创 2019-07-30 23:24:47 · 132 阅读 · 0 评论 -
剪枝
文章目录搜索方式剪枝搜索方式广度优先深度优先剪枝1现实中很多状态集非常大,蛮力搜索并不高效2已经得到优先集,把差的分支剪掉九宫格的游戏在有些步数已经可以分出胜负,则无需继续下了,96年深蓝在国际象棋中获胜并没有使用人工智能,只是使用了复杂的剪枝算法。...原创 2019-08-18 20:49:17 · 189 阅读 · 0 评论 -
二分查找
特点1 Sorted(单调递增或递减)2 Bounded(存在上下界)3 Accessible by index(可以通过索引访问)链表不方便执行执行方法模板left,right=0,len(array)-1while left<=right: mid(left+right)/2 if array[mid]==targrt: break or return resu...原创 2019-08-24 21:20:32 · 91 阅读 · 0 评论 -
字典树
解决实际中的问题百度搜索问题打几个字就会有推荐基本结构Trie树即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串),所以经常被搜索引擎用于文本词频统计。优点是:最大限度减少无谓字符串比较,查询效率比哈希表高。核心思想核心思想空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。基本性质1...原创 2019-08-25 12:31:21 · 1293 阅读 · 0 评论 -
102. 二叉树的层次遍历
文章目录问题描述代码思路1 BFS2DFS问题描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]代码思路1 BFS广度...原创 2019-08-18 02:01:58 · 112 阅读 · 0 评论 -
21分治和递归
文章目录递归概念递归代码模板斐波那契数列分治 (Divde & conquer)递归概念通过函数体进行循环案例1从前有座山2山里有座庙3庙里有个和尚在讲故事计算n!n!=123。。。。*ndef factorialif n<=1: return 1return n*factorial(n-1 ) 递归代码模板斐波那契数列def fib(n):...原创 2019-08-18 14:08:01 · 114 阅读 · 0 评论 -
位运算
位运算介绍程序中所有数在计算机内存中都以二进制进行存储,位运算说穿了,就是直接对整数在内存中的二进制数进行操作。比如,and运算本来就是一个逻辑运算符,但整数与整数之间进行and运算,举个例子,6的二进制119,11是1011,那么6 and 11 结果就是2,它的二进制对应逻辑运算的结果(0表示False,1表示True,空位当0处理)110 AND 1011-->0010(B)--...原创 2019-08-28 09:48:56 · 108 阅读 · 0 评论 -
191-位1的个数
问题描述编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'输入:00000000000000000000000010000000输出:1解释...原创 2020-01-10 13:07:33 · 118 阅读 · 0 评论 -
斐波那契数列
斐波那契数列概念:f(0)=0f(1)=1f(n)=f(n-1)+f(n-2)(当n>=2时)1递归法def fibo(n) count++#递归一次计数加1 if n==0 or n==1: return n return f(n-1)+f(n-2) 2正推法正常情况首先考虑正推法def fibo(n) arr[0]=0 arr[1]=1 ...原创 2019-09-04 23:12:35 · 216 阅读 · 0 评论 -
动态规划Dynamic programming
概念programming是递推的意思,没有编程的意思c++中三目运算符+斐波那契数列? :是一个三目运算符,先判断‘?’前面的,若为真,执行‘?’后面语句,else,执行‘:’后面语句!int fib(int n){return n<=1 ? n:fib(n-1)+fib(n-2)}这样的时间复杂度是O(2^n)如果加一个缓存伪代码如下,所有状态只计算一次int fi...原创 2019-09-06 22:32:47 · 109 阅读 · 0 评论 -
70 climbing stairs
问题描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例2输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 ...原创 2019-09-09 22:13:23 · 268 阅读 · 0 评论 -
#1.1.1循环和递归的效率定义用printN来比较
然后对其进行试验,在10 1000 10000时候都相同当到10000时候递归直接跳出计算机虽然递归的方式比较简洁,且易懂但计算机不愿意跑递归,递归把能用的空间全部使用完了,这告诉我们解决方法的效率也和空间的利用效率有关一下是自己测试代码#include"pch.h"#include <iostream>using namespace std;void prin...原创 2019-06-19 00:47:31 · 368 阅读 · 0 评论