左神算法基础课
文章平均质量分 78
是阿毛啊
这个作者很懒,什么都没留下…
展开
-
左神算法基础class6—题目3拓扑排序
左神算法基础class6—题目3拓扑排序1.题目:拓扑排序2.分析3.核心代码4.完整代码5.输出结果1.题目:拓扑排序拓扑排序算法适用范围:要求①有向图②有入度为0的节点③没有环2.分析在程序编译时,往往会有头文件互相依赖的情况,在图中箭头被指向的节点可以看做依赖于指向它的节点。如下图a依赖于b,c,d,而b又依赖c,k;d依赖k那么拓扑排序的输出顺序是不依赖别的点的先输出。先输出k...原创 2020-03-15 23:52:46 · 503 阅读 · 0 评论 -
左神算法基础class6—题目2宽度优先遍历和深度优先遍历
左神算法基础class6—题目2宽度优先遍历和深度优先遍历1.题目:宽度优先遍历和深度优先遍历2.宽度优先遍历(1)分析(2)核心代码3.深度优先遍历(1)分析(2)核心代码4.完整代码1.题目:宽度优先遍历和深度优先遍历2.宽度优先遍历(1)分析宽度优先遍历指从头节点开始,按照与当前节点步数越近越先输出的原则,遍历所有节点如果从1开始,最先遍历离1最近的2,3,4,接着再是7,5,6...原创 2020-03-15 14:58:27 · 617 阅读 · 0 评论 -
左神算法基础class6—题目1图的存储与表达
左神算法基础class6—题目1图的存储与表达1.题目:图的存储与表达2.分析(1)邻接表法(2)邻接矩阵(3)矩阵表达(题目常出现)3.图在内存中的存储(1)class Graph(2)class Node(3)class Edge(4)class GraphGenerator(5)测试4.完整代码1.题目:图的存储与表达图的存储方式:1)邻接表2)邻接矩阵如何表达图?生成图?2.分析...原创 2020-03-14 15:23:37 · 734 阅读 · 0 评论 -
左神算法基础class8—题目8数组中部分元素和等于某个值
左神算法基础class8—题目8数组中部分元素和等于某个值1.题目:数组中部分元素的和2.暴力递归(1)分析(2)核心代码3.动态规划(1)分析(2)核心代码1.题目:数组中部分元素的和给你一个数组arr,和一个整数aim。如果可以任意选择arr中的数字,能不能累加得到aim,返回true或者false2.暴力递归(1)分析思路和8-3打印字符串的子序列相同,对于每个元素可以选择要或者不...原创 2020-03-13 15:18:03 · 788 阅读 · 1 评论 -
左神算法基础class8—题目7二维数组中最小路径和
左神算法基础class8—题目7二维数组中最小路径和1.题目:二维数组中最小路径和2.暴力递归:(1)分析(2)核心代码3.动态规划:(1)分析(2)核心代码4.完整代码1.题目:二维数组中最小路径和给你一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或者向下。沿途经过的数字要累加起来。返回最小的路径和。2.暴力递归:(1)分析能够用递归的思路解决是...原创 2020-03-12 22:36:21 · 532 阅读 · 0 评论 -
左神算法基础class8—题目5母牛产子问题
左神算法基础class8—题目5母牛产子问题1.题目2.分析3.递归代码4.非递归5.完整代码1.题目母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设不会死。求N年后,母牛的数量。2.分析先列出图表找规律可以看出规律:今年生的牛等于去年牛的总和,再加上所有成熟的牛再生一个(成熟的母牛数量),那么成熟的牛的数量怎么知道呢?根据题意实际就是三年前牛的总和(三年前所有的牛完...原创 2020-03-12 20:42:31 · 540 阅读 · 0 评论 -
左神算法基础class8—题目4打印字符串的全排列
左神算法基础class8—题目4打印字符串的全排列1.题目:打印一个字符串的全部排列2.分析3.完整代码4.结果及额外要求1.题目:打印一个字符串的全部排列2.分析先固定字符串的第一个元素,再求解剩余字符串的全排列,求解方法又和本问题相同,递归解题①遍历所有可能出现的首字符:使用交换的方法,按顺序依次交换其他元素与第一个元素②固定住第一个元素,再递归第二个起的元素③结束条件是当前递归的...原创 2020-03-12 19:47:34 · 349 阅读 · 0 评论 -
左神算法基础class8—题目3打印字符串的全部子序列
左神算法基础class8—题目3打印字符串的全部子序列1.题目:打印一个字符串的全部子序列,包括空字符串2.分析3.完整代码1.题目:打印一个字符串的全部子序列,包括空字符串2.分析假如字符串为abc,所有子串的可能为:空,a,ab,ac,abc,b,bc,c对于字符串的每一个元素,我们都可以选择要或者不要,如下图,如果需要当前元素,获得一个“a”第一个元素不需要的话那么第一个就是“ ”,...原创 2020-03-12 18:21:49 · 434 阅读 · 0 评论 -
左神算法基础class8—题目1、2求n!,汉诺塔问题
左神算法基础class8—题目1求n!1.求n!(1)题目:求n!的结果(2)分析2.汉诺塔问题(1)题目:打印n层汉诺塔从最左边移动到最右边的全部过程(2)分析(3)复杂度分析1.求n!(1)题目:求n!的结果(2)分析两种思路:正向和逆向①正向思考n!就是从1开始不断累乘到nlong getFactorial1(int n){ int res = 1; for(int i ...原创 2020-03-12 16:37:42 · 365 阅读 · 0 评论 -
左神算法基础class7—题目4切金条问题
左神算法基础class7—题目4切金条问题1.题目2.分析3.完整代码1.题目一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条...原创 2020-03-12 14:35:34 · 467 阅读 · 0 评论 -
左神算法基础class7—题目1前缀树一系列问题
左神算法基础class7—题目1前缀树一系列问题1.题目:前缀树一系列问题2.前缀树(1)前缀树介绍(2)前缀树类的实现①节点类②树类3.成员函数(1)添加函数(2)查找函数(3)删除函数(4)查找某前缀出现次数4.完整代码1.题目:前缀树一系列问题生成前缀树,包括添加、删除、查找的功能,此外还需要查找某个前缀出现的次数。2.前缀树(1)前缀树介绍前缀树用于统计词频,如下图当我们添加“a...原创 2020-02-10 17:22:18 · 396 阅读 · 1 评论 -
左神算法基础class5—题目5岛问题
左神算法基础class5—题目5岛问题1.题目:岛问题2.分析3.核心代码(1)递归求岛的范围(2)求岛的数量4.完整代码5.扩展:并行问题1.题目:岛问题一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?举例:0 0 1 0 1 01 1 1 0 1 01 0 0 1 0 00 0 0 0...原创 2020-02-08 19:26:46 · 494 阅读 · 0 评论 -
左神算法基础class5—题目6并查集实现
左神算法基础class5—题目6并查集实现1.介绍:并查集(1)并查集的结构(2)并查集的原理2.分析(1)类的设计(2)查找代表节点(3)判断是否是同一集合(4)合并两个集合3.完整代码4.运行结果1.介绍:并查集并查集的作用主要有两点:①快速查两个元素是同一集合②合并两个集合。(1)并查集的结构当集合中只有一个元素时,这个集合的代表节点即为该元素,该元素的father也是自己。...原创 2020-02-02 14:32:09 · 497 阅读 · 1 评论 -
左神算法基础class5—题目2设计RandomPool结构,可加入、删除、获得key,复杂度为O(1)
左神算法基础class5—题目2设计RandomPool结构,可加入、删除、获得key,复杂度为O(1)1.题目:2.Map的简单介绍3.分析4.完整代码1.题目:设计RandomPool结构一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。 getRandom():等概率随机返回结...原创 2020-01-30 22:12:12 · 391 阅读 · 0 评论 -
左神算法基础class4—题目8已知一棵完全二叉树,求其节点的个数
左神算法基础class4—题目8已知一棵完全二叉树,求其节点的个数1.题目:已知一棵完全二叉树,求其节点的个数。要求:时间复杂度低于O(N),N为这棵树的节点个数2.分析3.核心代码(1)主函数(2)计算树的深度(3)计算节点个数4.完整代码5.复杂度分析1.题目:已知一棵完全二叉树,求其节点的个数。要求:时间复杂度低于O(N),N为这棵树的节点个数2.分析由于要求 时间复杂度小于O(N),...原创 2020-01-20 17:35:54 · 562 阅读 · 0 评论 -
左神算法基础class4—题目7-2判断一棵树是否是完全二叉树
左神算法基础class4—题目7-2判断一棵树是否是完全二叉树1.题目:判断一棵树是否是完全二叉树2.预备知识:按层遍历(1)思路(2)核心代码(3)完整代码3.判断完全二叉树(1)思路(2)核心代码(3)完整代码1.题目:判断一棵树是否是完全二叉树2.预备知识:按层遍历由于判断完全二叉树需要使用层序遍历,先讲解下层序遍历,上图按层遍历的结果是5,3,8,2,4,6,10,7(1)思路...原创 2020-01-20 14:30:26 · 315 阅读 · 0 评论 -
左神算法基础class4—题目7-1判断一棵树是否是搜索二叉树
左神算法基础class4—题目7-1判断一棵树是否是搜索二叉树1.题目:判断一棵树是否是搜索二叉树2.分析(1)搜索二叉树(2)解题思路3.核心代码(1)树的建立(2)中序遍历的非递归(3)更改中序遍历4.完整代码1.题目:判断一棵树是否是搜索二叉树2.分析(1)搜索二叉树搜索二叉树指任意节点为头的子树,左子树小于头节点,右子树大于头节点。对于节点3,左子树2小于3,右子树4大于3;...原创 2020-01-19 11:31:49 · 507 阅读 · 0 评论 -
左神算法基础class4—题目6判断一棵二叉树是否是平衡二叉树
左神算法基础class4—题目6判断一棵二叉树是否是平衡二叉树1.题目:判断一棵二叉树是否是平衡二叉树2.分析(1)平衡二叉树的概念(2)二叉树题解套路3.核心代码(1)树的建立(2)设计递归返回结构(3)递归过程(4)判断函数4.完整代码1.题目:判断一棵二叉树是否是平衡二叉树2.分析(1)平衡二叉树的概念平衡二叉树指对于任意节点,其左右节点高度差不超过1。满二叉树一定是平衡二叉树,平衡...原创 2020-01-16 11:45:07 · 591 阅读 · 1 评论 -
左神算法基础class4—题目4二叉树的序列化和反序列化
左神算法基础class4—题目4二叉树的序列化和反序列化1.题目:二叉树的序列化和反序列化2.分析(1)先序的序列化(2)先序的反序列化①去掉分隔符并存储在队列中②重新生成树的结构3.完整代码1.题目:二叉树的序列化和反序列化①序列化是指保存、记录一个树,先序序列化是用先序遍历的方式保存。先序的顺序是1,2,4,5,3,6,7;之间用“ _ ”隔开,对于叶子节点4、5、6、7这四个节点把它的...原创 2020-01-09 13:09:11 · 449 阅读 · 1 评论 -
左神算法基础class4—题目3在二叉树中找到一个节点的后继节点、前驱节点
左神算法基础class4—题目3在二叉树中找到一个节点的后继节点、前驱节点1.题目:在二叉树中找到一个节点的后继节点2.分析3.核心代码(1)新二叉树的数据结构(2)添加树中的节点(由构造函数)(3)查找后继节点4.完整代码5.补充:查找前驱节点1.题目:在二叉树中找到一个节点的后继节点现在有一种新的二叉树节点类型如下:public class Node{public int value...原创 2020-01-07 21:34:19 · 450 阅读 · 0 评论 -
左神算法基础class4—题目1实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式
左神算法基础class4—题目1实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式题目:实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式1.数据结构2.先序遍历(1)递归版(2)非递归版(3)完整代码2.中序遍历(1)递归版(2)非递归版(3)完整代码3.后序遍历(1)递归版(2)非递归版(3)完整代码4.先序、中序、后序的另一种理解题目:实现二叉树的先序、中序、后序遍历,包括...原创 2020-01-07 11:56:55 · 962 阅读 · 0 评论 -
左神算法基础class3—题目14两个单链表相交的一系列问题
左神算法基础class3—题目14两个单链表相交的一系列问题1.题目2.分析(1)判断有无环:有环返回第一个相交节点,无环返回空3.核心代码4.完整代码5.输出结果1.题目【题目】 在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数, 如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null 即...原创 2020-01-03 16:55:50 · 394 阅读 · 0 评论 -
左神算法基础class3—题目13复制含有随机指针节点的链表
左神算法基础class3—题目13复制含有随机指针节点的链表1.题目:复制含有随机指针节点的链表2.分析3.核心代码(1)生成题设链表(2)加入新节点(3)复制新节点的值及rand指针(4)分离拷贝的部分4.完整代码1.题目:复制含有随机指针节点的链表【题目】 一种特殊的链表节点类描述如下:public class Node{public int value;public Node n...原创 2019-12-30 12:05:13 · 371 阅读 · 0 评论 -
左神算法基础class3—题目12单向链表按某值划分成左边小、中间相等、右边大的形式
左神算法基础class3—题目12单向链表按某值划分成左边小、中间相等、右边大的形式普通版题目:单向链表按某值划分成左边小、中间相等、右边大的形式(不用考虑稳定性且额外空间复杂度为O(n))1.分析2.核心代码(1)链表的生成及添加元素(2)把链表放入数组中(3)荷兰国旗排序(4)把数组放回链表中3.完整代码4.输出结果增强版;待续普通版题目:单向链表按某值划分成左边小、中间相等、右边大的形式(...原创 2019-12-28 12:14:17 · 333 阅读 · 0 评论 -
左神算法基础class3—题目11判断一个链表是否为回文结构(不同额外空间复杂度的三种方法)
左神算法基础class3—题目11三种方法判断一个链表是否为回文结构题目:判断一个链表是否为回文结构方法一:利用堆栈结构(额外空间复杂度O(n))(1)分析(2)核心代码(3)完整代码方法二:利用快慢指针和堆栈结构(额外空间复杂度O(n/2))(1)分析(2)核心代码(3)完整代码方法三:待续。。题目:判断一个链表是否为回文结构【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构...原创 2019-12-27 18:03:15 · 581 阅读 · 0 评论 -
左神算法基础class3—题目10打印两个有序链表的公共部分
左神算法基础class3—题目10打印两个有序链表的公共部分1.题目2.分析3.核心代码(1)链表的建立(2)外排过程4.完整代码5.输出结果1.题目【题目】 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。2.分析打印链表的公共部分类似外排方式(外排不了解的请点击查看算法流程3),原理如下:设置两个指针分别指向链表1和链表2的第一个数,比较指针所指的数的大小(1...原创 2019-12-26 11:28:48 · 352 阅读 · 0 评论 -
左神算法基础class3—题目9在行列都排好序的矩阵中找数
左神算法基础class3—题目9在行列都排好序的矩阵中找数1.题目2.分析3.核心代码4.完整代码5.输出结果1.题目【题目】 给定一个有M*N的整型矩阵matrix和一个整数num,matrix的每一行和每一 列都是排好序的。实现一个函数,判断K是否在matrix中。 例如:{{1,3,5,6},{2,5,7,9},{4,6,8,10}} 如果num为7,返回true;如果K为11,返回fa...原创 2019-12-26 10:05:21 · 289 阅读 · 0 评论 -
左神算法基础class3—题目7反转单向和双向链表
左神算法基础class3—题目7反转单向和双向链表题目1:反转单向链表1.分析2.核心代码3.完整代码4.输出结果题目2:反转双向链表1.分析2.核心代码3.完整代码4.输出结果题目1:反转单向链表【要求】 如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1)1.分析可以使用迭代法。需要三个指针指向前一个节点,当前节点和后一个结点。反转时把当前节点指向前一个节点,再把...原创 2019-12-25 21:39:41 · 525 阅读 · 0 评论 -
左神算法基础class3—题目8之字形打印矩阵c++实现
左神算法基础class3—题目8之字形打印矩阵c++实现1.题目2.分析3.核心代码(1)A、B点的更新(2)打印A、B之间的数字4.完整代码5.输出结果1.题目给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16。“之”字形打印的结果为:1 2 5 9 6 3 4 7 10 13 14 11 8 12 ...原创 2019-12-23 21:13:28 · 504 阅读 · 0 评论 -
左神算法基础class3—题目6旋转正方形矩阵
左神算法基础class3—题目6旋转正方形矩阵1.题目2.分析3.核心代码4.完整代码5.输出结果1.题目【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。【要求】 额外空间复杂度为O(1),不使用辅助数组。2.分析分析:题目给定的是正方形矩阵,考虑把矩阵看成回字形结构,由外到内按层进行旋转,先外层后内层。与题目5思路相同规定左上角和右下角的点为(...原创 2019-12-23 10:37:45 · 353 阅读 · 0 评论 -
左神算法基础class3—题目5转圈打印矩阵
左神算法基础class3—题目5转圈打印矩阵1.题目2.分析3.核心代码4.完整代码5.输出结果1.题目给定一个整型矩阵matrix,请按照转圈的方式打印它。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10【要求】 额外空间复杂度为O(1)。2.分析(1)本...原创 2019-12-22 20:50:05 · 387 阅读 · 0 评论 -
左神算法基础class3-2—题目3仅用栈结构实现队列结构
左神算法基础class3-2—题目3仅用栈结构实现队列结构1.题目2.分析3.核心代码4.完整代码5.输出结果1.题目如何仅用栈结构实现队列结构?2.分析栈本身是先进后出的结构,要想实现先进先出队列的作用就需要两个栈,把一个栈先倒到另一个栈内再pop出来。(1)设计两个栈,一个命名为push、一个为pop。把数据输入push栈,把从pop栈输出的数据作为队列的输出结果。(2)需要输出...原创 2019-12-20 09:39:57 · 297 阅读 · 0 评论 -
左神算法基础班C++实现目录
左神算法基础班C++实现class1class2class3class1题目1:遍历、二分、外排打印数组B不在A中的数及复杂度分析题目3、4、5:冒泡,选择、插入排序实现及复杂度分析题目7、8:归并排序实现、复杂度分析及其应用:小和问题、逆序对问题class2题目1:荷兰国旗问题及复杂度分析题目2:经典快排、荷兰国旗改进快排及随机快排题目3:堆heapInsert、heapify、...原创 2019-12-17 16:45:00 · 2850 阅读 · 1 评论 -
左神算法基础class3-1—题目3仅用队列结构实现栈结构
左神算法基础class3—题目3-1仅用队列结构实现栈结构1.题目2.分析3.核心代码4.完整代码5.结果输出1.题目如何仅用队列结构实现栈结构?2.分析使用两个栈实现队列:(1)一个队列命名为data,所有数据压入此队列。(2)当需要出栈的操作时,把除队列最后一个元素外的所有元素出队列并压入help队列。(3)此时data还有最后一个元素,是最后进来的元素,pop掉(4)交换da...原创 2019-12-17 16:26:01 · 273 阅读 · 0 评论 -
左神算法基础class3—题目2返回栈中最小元素
左神算法基础class3—题目2返回栈中最小元素1.题目2.分析3.核心代码4.完整代码5.结果1.题目实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】1.pop、push、getMin操作的时间复杂度都是O(1)。2.设计的栈类型可以使用现成的栈结构。2.分析1.可以直接使用STL中stack#include<stack>:(1)e...原创 2019-12-17 12:38:45 · 377 阅读 · 0 评论 -
左神算法基础class3—题目1使用数组实现队列和栈
使用数组结构实现大小固定的队列和栈1.使用数组实现栈(1) 分析(2) 核心代码①入栈②出栈(3) 完整代码(4) 输出结果2.使用数组实现队列(1) 分析(2) 核心代码①添加数据②释放数据③输出队列(3) 完整代码(4) 结果输出1.使用数组实现栈(1) 分析使用index变量指向数组的位置表示要把新来的数放在什么位置。1.入栈时把数值赋给数组中index位置,之后index自增,在i...原创 2019-12-16 22:48:23 · 608 阅读 · 0 评论 -
左神算法基础class2—题目7、8桶排序之计数排序及其应用
左神算法基础class2—题目7、8桶排序之计数排序及其应用1.计数排序介绍分析核心代码完整代码2.应用:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。【随机生成9个数,范围在0-99】分析核心代码1.找出整个数组的min和max2.最小值最大值为min、max时,把min、max之间的数划分为N+1个桶,当前数值存在a号桶内。3.更新桶内...原创 2019-12-16 17:16:54 · 487 阅读 · 2 评论 -
左神算法基础class2——题目3 堆heapInsert、heapify、堆排序C++实现
左神算法基础class2——题目3 堆heapInsert、heapify、堆排序C++实现1.基础知识2.heapInsert:新结点加入进来并向上调整为大根堆的过程分析核心代码完整代码时间复杂度3.heapify:假设数组中一个值变小了,重新调整为大根堆的过程分析核心代码完整代码4.堆排序分析核心代码完整代码时间复杂度1.基础知识1.完全二叉树有两种:5/ \1 2/ \...原创 2019-12-12 18:45:55 · 2092 阅读 · 1 评论 -
左神算法基础class2——例子2经典快排,荷兰国旗改进快排,随机快排C++实现
左神算法基础class2——例子2经典快排,荷兰国旗改进快排,随机快排1.经典快排分析核心代码完整代码2.荷兰国旗改进的经典快排分析核心代码完整代码3.随机快排分析核心代码完整代码1.经典快排分析思路和荷兰国旗问题中的预备题目一样。1.首先在数组[l,r]中把最后一个元素作为num进行比较,得到两段区域,分别为小于等于最后一个数的区域和大于最后一个数的区域。2.在上述第一段区域内,最后一...原创 2019-12-11 17:17:20 · 665 阅读 · 0 评论 -
左神算法基础class2——例子1荷兰国旗问题
左神算法基础class2——例子1荷兰国旗问题预备题目:给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)分析核心代码完整代码荷兰国旗问题:给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时...原创 2019-12-11 14:24:28 · 612 阅读 · 0 评论