- 博客(178)
- 收藏
- 关注
原创 [算法、读书笔记、C++,搜索与图论]dijkstra算法
介绍Dijkstra算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法,是从一个顶点到其余各顶点的最短路径算法。应用: 解决有权图中最短路径问题。思想: 从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接点,直到扩展到终点为止。下面,我们演示一下具体的过程有向图 如下面所示:起点(源点)为v1 ,终点为v4从起点v1出开始遍历,标记v1已经被遍历过遍历v1的邻接点,找到距离最近的邻接点 :v2因为 v1->v2距离为7,v1-
2022-04-12 09:31:13 484
原创 [数据结构、读书笔记、C++] 并查集详解
介绍并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的 合并及查询 问题。其主要操作为:Union(合并) :将两个节点所在集合合并为一个集合Find (查询) :查询某个节点属于哪个集合(即返回所在树的根节点)图示:通过上面的表述,恐怕我们并不清楚并查集到底是什么样子的?下面我们用 图来表示一下有四个节点我们编号为1,2,3,4,也可以有四棵树,每棵树只有一个节点,该节点即为根节点。这四棵树组成的集合(森林 就是我们所说的并查集我们使用数组存储 ,上
2022-03-31 21:17:21 4197 10
原创 [算法、读书笔记]二分查找算法
二分查找算法百度百科:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如果x<a[n/2],则我们只要在数组a的左半部继续搜索x;如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。图解:比如,
2022-03-24 14:02:13 421 2
原创 [数据结构、读书笔记 ] 队列 以及 单调队列
队列队列的介绍队列也是我们一种很常用的基本数据结构,符合"先进先出"的特性。即最先被放入队列的元素 ,出队时,会最先被取出。一般来说,我们从队列右侧放入元素,可把队列右侧称为队尾 ;从队列左侧 取出元素,可把队列左侧称为 队头 。如图所示:代码const int N=100; //放入过队列中元素数量的最大值int que[N]; //存放整形数据的队列int hh=0,tt=-1; //hh 队头下标 tt队为下标//判断是否为空hh>tt 为真时,队列是空的hh&
2022-03-23 19:49:40 559
原创 [蓝桥杯] 基础练习 完美的代价
问题描述问题描述回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma第三次交换 ma : madam (回文!完美!)输入格式第一行是一个整数N,表示接下来的字符串的长度(N <= 8000) 第二行是一个字符串,长度为N.
2022-01-01 20:39:46 188 3
原创 [设计模式、C++、go]结构型模式:适配器模式
文章目录适配器模式介绍类图代码实现C++测试go测试优缺点注:适配器模式介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。其定义:Convert the interface of a class into another interface clientsexpect.Adapter lets classes work togethe
2022-01-01 19:52:17 602
原创 [Go]新手入门:map的介绍与使用
文章目录介绍使用创建变量基本操作增加元素对查找元素对遍历删除元素对修改元素对使用注意事项在遍历时修改map的值在遍历时新增或者删除 元素对并发环境关于nil map介绍Go语言中的map是一种存放元素对的无序集合(数据结构)元素对:即key-value对;key为键值,value为值;key可以理解为数组的下标,根据key可以快速的找到对应的value值map在其他语言中也存在对应的数据结构 eg:Python中字典(dict);C++中的map;Java中的HashMapGo中的map与其他语
2022-01-01 12:38:52 1411 1
原创 [设计模式、C++、go]创建型模式:原型模式
文章目录原型模式介绍原型模式介绍意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。主要解决:在运行期建立和删除原型。何时使用: 1、当一个系统应该独立于它的产品创建,构成和表示时。 2、当要实例化的类是在运行时刻指定时,例如,通过动态装载。 3、为了避免创建一个与产品类层次平行的工厂类层次时。 4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。如何解决:利用已有的一个原型对象,快速地生成和原型对象一
2021-12-29 10:30:35 706 2
原创 [设计模式、C++、go]创建型模式:建造者模式
文章目录建造者模式介绍类图:代码实现:C++测试优缺点使用场景建造者模式介绍建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象定义: Separate the construction of a complex object from itsrepresentation sothat the same construction process can createdifferent representations.(将一个复杂对象的构建与它的表示分离,使
2021-12-27 15:47:23 771 3
原创 [设计模式、C++、go]创建型模式:抽象工厂模式
抽象工厂模式介绍抽象工厂的功能是为一系列 相关对象或相关依赖 的对象创建一个接口其定义为: Provide an interface for creating families of related ordependent objectswithout specifying their concreteclasses.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。)主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的
2021-12-27 15:21:38 515 2
原创 [设计模式、C++、go]创建型模式:工厂模式
文章目录工厂模式介绍工厂模式介绍前言:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。而工厂类也就是充当工厂的作用,我们也要告诉这个类,要什么类型的对象,就要返回给我们。其定义为:Define an interface for creating an object,but let subclasses decide whichclass to instantiate.Factory Method lets a class defer insta
2021-12-22 17:13:45 964 3
原创 [设计模式、C++、go]简单工厂模式
文章目录简单工厂介绍类图:代码实现C++简单工厂代码:外部调用:go简单工厂代码:外部调用:优缺点应用场景扩展:简单工厂介绍简单工厂模式并不是一个标准的设计模式,但是它十分的简单而且很常用。其定义:提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类。意图: 避免让模块外部知道模块内部的具体实现。主要代码:在模块内部新建一个类,外部应用可以通过这个类来获取相应的对象,操作其方法。类图:Client: 即外部应用Factory: 即我们
2021-12-21 17:42:39 861
原创 [设计模式、C++、go]创建型模式:单例模式
文章目录单例模式介绍类图代码实现C++懒汉模式:饿汉模式两种模式的比较go饿汉模式懒汉模式扩展(产生固定数量的对象)单例模式介绍单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。其定义为:Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2021-12-19 20:45:16 1756 1
原创 [Linux、脚本]Shell脚本编程
文章目录Shell脚本介绍Shell编程Shell脚本入门--Hello world!Shell脚本的执行变量变量命名规则赋值和取值Shell脚本介绍我们平时打开一个shell终端,通过键盘输入相应的命令,执行得到结果。如下图:打开shell中断 ----输入pwd ----执行命令,输出所在路径等上一条命令执行完毕之后,我们还可以输入命令,执行上述过程,这可以称之为互动模式。而我们这里所要说的脚本,便于之相应,所谓脚本模式,就是将我们要使用的命令,写入一个文件(这个文件可以称之为脚本文件)中,
2021-12-19 16:28:58 1287
原创 [C语言]关于printf输出的奇怪事:printf(“%d %d %d %d %d\n“, ++i, --i, i++,i--, i),printf(“%c%c\n“,*p++,*p++)的结果分析
printf(“%d %d %d %d %d\n“, ++i, --i, i++,i--, i)printf(“%c%c\n“,*p++,*p++)的结果分析
2021-12-09 21:04:22 8471 6
原创 错误中包含_CRT_SECURE_NO_WARNINGS的解决方法
在vs下面,认为scanf等等函数,是不安全的,如果使用的话,会出现报错,如下图:出现这个错误时,上面说明了两种解决方式使用了安全的函数scanf_s:在文件中,增加宏定义_CRT_SECURE_NO_WARNINGS添加_CRT_SECURE_NO_WARNINGS手动在项目中添加#define _CRT_SECURE_NO_WARNINGS这样仅仅在当前文件中存在。在项目属性当中设置好,每新建一个文件,都会有这条语句:项目->属性->配置属性->C/C++ -&g
2021-10-24 22:12:46 10191
原创 I/O多路转接模型 [select] [poll] [epoll]
目录select:函数解析:参数类型分析:监控流程:优缺点:多路复用又称多路转接;可以监控多个文件描述符,当监控的文件描述符有事件(可读、可写、异常)产生的时候,就会通知调用者;这样可以避免,进程对没有就绪的文件描述符进行操作,从而陷入阻塞的情况select:select就是多路复用的一种实现;它主要将用户关心的文件描述符拷贝到内核,有内核进行监控,内核监控到有某些文件描述符有时间产生的时候就会返回对应的文件描述符,用户对返回的文件描述符进行操作;函...
2021-09-21 10:08:12 986 7
原创 [C/C++]函数重载,三连问,你会吗?
目录1. 什么是函数重载2.为什么C++能够支持函数重载,而C语言不支持函数重载。函数修饰规则总结判断是否是函数重载func(vector& vec)和func(vector& vec)可以构成函数重载吗?func(const int val)和func(int val)可以构成函数重载吗?1. 什么是函数重载首先,本文是在讲函数重载,那么函数重载是什么呢?函数重载是指在相同的作用域中,具有相同的名称而形参列表不同的多个函数。***注:与函数返回值无关 ***。形参列表不同代表:函数
2021-08-22 19:31:51 1125 10
原创 Error:Enable multithreading to use std::thread: Operation not permitted
解决方法: 增加 -Wl,–no-as-needed 选项terminate called after throwing an instance of ‘std::system_error’what(): Enable multithreading to use std::thread: Operation not permittedAborted今天在使用c++11的thread库编写代码测试的时候,编译.cpp文件后,执行对应的可执行文件的时候出现上述错误情况如下:使用编译命令如下:
2021-08-04 16:05:08 683 3
原创 [蓝桥杯]格子刷漆
问题描述: X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序。 c e f d a b 是另一种合适的方案。 当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。...
2021-06-21 10:29:58 306 2
原创 [C++]异常处理,你不会不清楚吧
文章目录异常概念:C语言中处理错误的方式:C++异常:异常的某些规则异常可以重新抛出异常规范异常安全:C++库的异常体系异常概念:异常是C++引入的一种新的处理错误方式,当函数发现一个自己无法处理的错误的时候,就会抛出异常,交给函数调用者进行处理C语言中处理错误的方式:1.使用断言assert() 进行判断2.返回错误码C++异常:C++中引入了三个关键字throw ,catch, try 来支持异常throw: 当出现错误,进行抛出的时候,是使用throw完成的catch: 在可能出
2021-06-20 21:06:14 200
原创 [MySQL]爆肝万字,带你入门MySQL(SQL语句命令大全)
文章目录什么是MySQL?数据库?SQL语句:注:连接数据库:退出数据库:查看当前的数据库连接情况:关于库的操作查看所有的数据库 show databases;创建数据库: create database [数据库名称];切换数据库: use [数据库名称];删除数据库: drop database [if exists] [数据库];查看数据库结构 show create database [数据库名称];查看字符集和校对规则创建数据据库(带有字符集和校对规则)修改数据库属性备份数据库还原备份的数据库关
2021-05-28 17:06:33 837 8
原创 [蓝桥杯]第十一届决赛B组试题解析
文章目录A 美丽的2题解:代码题目链接:B 扩散题解:代码:题目链接:C 阶乘约数题解:代码:题目链接:D 本质上升序列题解:代码:题目链接:E 玩具蛇题解:代码:题目链接:A 美丽的2题目描述:本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小蓝特别喜欢 22,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1年到公元 2020年(包含)中,有多少个年份的数位中包含数字 22?题解:本题是比较简单的一道题,即让我们1~2020这些数字中,哪些数字上包含2,犹如
2021-05-26 22:32:01 1613 8
原创 [Golang]面向对象营养餐,一文管够(封装,继承,多态)
文章目录封装结构体:结构体的定义实例化结构体内存分布匿名结构体与匿名字段方法方法定义的基础语法继承方法重写:多态:Go中也存在着面向对象编程,不过与传统的OOP(面向对象编程)语言相比,它舍弃了使用类,采用更加灵活的结构体。实现继承也采用使用匿名字段的方式,摒弃了传统意义的继承,并且通过接口可以实现多态。在Go中,也摒弃了虚方法,构造函数,析构函数的概念。注: Go中面向对象的三大特性,使用结构体实现封装,采用匿名字段实现继承,通过接口实现多态封装结构体:结构体相当于一个存放相同或不同数据类型
2021-05-24 16:47:08 953 11
原创 [Golang]函数详解
函数在其他语言中也是一种很重要的存在。函数其实就是一个能够执行特定任务并且能够重复使用的代码块,可以能够减少代码的重复率。函数定义在GO中,函数的定义可能与其他语言相比,有些不同之处:func 函数名称 (参数列表) (返回值列表){函数体 }func : Go中的关键字,用来定义一个函数函数名称也是一种标识符,符合之前的规则:只能包含字母,数字,下划线;并且不能够以数字开头;倘若首字母大写,则可以在别的包中使用,倘若首字母小写,只能在本包当中进行使用;参数列表: 形参变量名称 数据类
2021-05-20 21:26:44 648 2
原创 [Golang]包
文章目录前言:包名与标识符包标识符包的搜索:前言:包就是数据和函数的集合,即我们编写的每个.go的程序文件都归属于一个包,在Go中,是通过包的形式来对项目结构或者文件进行管理。包名与标识符包因为我们是通过包来管理文件,所以包名的命名是十分重要的,通常情况下,包名就是存放所使用的包的文件目录名。当然我们也并不需要过度担心存在包名冲突的问题,引入导入包的时候,是需要靠全路径进行导入的,可以区分不同的包。一般情况下,包被导入后包名就是默认的名字,访问该包内的函数或者变量的时候,需要使用(Go中可以给该
2021-05-11 15:42:34 1088 3
原创 [Golang]类型和变量
文章目录注:变量:特殊的变量常量:基本数据类型:int和uint类型byte和runestringGo的关键字数据类型转换注:Go不同于C语言,它有更简洁的追求,每条语句尽量占据一行,且语句结束的时候可以不添加分号(" ; "),编译器会自动进行添加。当然如果你想将两条语句放入一行的话,那么还是应该乖乖的加上分号。变量:变量名也就是标识符,只能够包含字母,数字和下划线(""), 且不能够以数字开头,在Go中,不能够使用单独的下划线表示一个变量,单独的下划线在Go中表示一个占位符,在接收多个函数返回值
2021-05-10 19:59:28 513
原创 [广度优先搜索]二叉树的层序遍历
前提: 首先我们要达成一个共识,进行二叉树的层序遍历的方法叫做广度优先搜索,是使用了队列这个数据结构来实现的题目:1.二叉树的层序遍历 给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。层序遍历结果为 3 9 20 15 7思路:我们先将根节点入队,如果队列不为空,取队首元素,如果该元素左子树不为空,入队,如果该元素右子树不为空,入队;直至队列位空,层序遍历完毕;代码:给定一个...
2021-04-22 15:19:07 688
原创 [动态规划](烦人的背包)背包问题
文章目录背包问题:思路:动态规划:代码:代码优化:[背包问题 II](https://www.lintcode.com/problem/125/)思路:代码[背包问题 III](https://www.lintcode.com/problem/440/)思路:代码:[背包问题 IV](https://www.lintcode.com/problem/562/)思路:代码:[背包问题 V](https://www.lintcode.com/problem/563/)思路背包问题:描述在n个物品中挑选若
2021-04-16 12:56:43 304
原创 [文件压缩]LZ77
LZ77算法原理:LZ77是基于字节的通用压缩算法,它的原理就是将源文件中的重复字节(即在前文中出现的重复字节)使用 (distance,length,nextchar)的三元组进行替换参数:distance:表示待匹配的当前字符距离匹配字符串首字母的距离length :表示匹配字符串的长度,即有多少 个字符与前文匹配nextchar:表示当前匹配串的下一个字符例如:下面的内容,使用LZ77算法进行压缩的话mnoabczxyuvwabc123456abczxyde...
2021-03-29 23:18:46 2295 3
原创 [文件压缩]huffman树
在某些时候,我们用U盘拷取大文件的时候,很慢,传输效率不高,我们通常会将文件进行压缩,不仅可以提高传输效率,还可以用更小的空间保存。数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据压缩。总之,数据压缩是一种很典型且常用的一门技术。而huffman树就是用来压缩数据而创建的一种数据结构.压缩原理:倘若文件里面保存AAABCC 等字符,现在我们要对此进行压缩,可以采用什么办法呢?1.用等长编码代替因为我们要保存三个字符,而每个.
2021-03-29 10:27:44 579
原创 [力扣]最长不含重复字符的子字符串[滑动窗口]
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zui-ch...
2021-03-16 16:19:06 198
原创 [力扣]只有两个键的键盘
题目:最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字n。你需要使用最少的操作次数,在记事本中打印出恰好n个 'A'。输出能够打印出n个 'A' 的最少操作次数。示例 1:输入: 3输出: 3解释:最初, 我们只有一个字符 'A'。第 1 步, 我们使用 Copy All 操作。...
2021-03-16 15:28:42 308
原创 [设计模式]创造模式之原型模式
意图:通过拷贝一个现有对象生成新对象关键代码:实现一个clone接口,完成对象的快速拷贝优点:1、性能提高缺点:1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。 2、可能逃避构造函数的约束。使用场景:1、资源优化场景。 2、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。 ...
2021-03-15 20:46:59 128
原创 linux操作命令
系统管理命令:psps -u [用户名]显示指定用户的进程信息ps -aux-aux 显示所有包含其他使用者的行程 au(x) 输出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER: 行程拥有者 PID: pid %CPU: 占用的 CPU 使用率 %MEM: 占用的记忆体使用率 VSZ: 占用的虚拟记忆体大小 RSS: 占用的记忆体大小 TTY: 终端的次...
2021-03-14 16:47:42 171
原创 [设计模式] 创建模式之工厂模式
目录工厂模式(Factory Pattern)介绍:代码实现:简单工厂模式:多工厂模式:工厂模式(Factory Pattern)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象介绍:意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问...
2021-03-12 22:58:27 228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人