- 博客(40)
- 收藏
- 关注
原创 每日一题(day8)最长公共子串、子数组最大累加和、最长回文子串
一、最长公共子串动态规划法描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。示例1输入:"1AB2345CD","12345EF"返回值:"2345"class Solution {public: /** * longest common substring * @param str1 string字符串 the string * @param str2
2021-09-15 19:37:18 233
原创 每日一题(day7)
一、链表中环的入口结点描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序会打印这个节点解题思路:1.采用快慢指针进行求解如果链表存在环,则fast和slow会在环内相遇,定义相遇点到入口点的距离为X,定义环的长度为C,定义头到入口的距离为L,fast在slow进入环之后一圈内追上s
2021-08-27 10:48:27 287
原创 每日一题(day6)
一、设计LRU缓存结构描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过K时,移除最不经常使用的记录。3.输入一个二维数组与K,二维数组每一维有2个或者3个数字,第1个数字为op
2021-08-23 14:14:14 294
原创 每日一题(day5)
一、最长无重复子数组(c++)描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组输入:[2,3,4,5]复制返回值:4复制说明:[2,3,4,5]是最长子数组 class Solution {public: /** * * @param arr int整型vect
2021-08-17 10:56:44 388
原创 每日一题(day4)
1.合并有序链表描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。示例1输入:{1},{2}返回值:{1,2}class Solution {public: /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ ListNode* merge
2021-08-03 11:38:16 97
原创 每日一题(day3)
1.二叉树前中后序遍历/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root Tr eeNode类 the root of binary tree * @return int整型vector<vector.
2021-07-30 12:34:10 148
原创 使用多线程按奇偶数交替打印0-100
#include <thread>#include <mutex>#include <condition_variable>void thread_print(){ std::mutex mtx; condition_variable c; int n = 100; bool flag = true; thread t1([&](){ int i = 0; while (i < n) { unique_lock<.
2021-07-28 19:20:58 186
原创 单例模式设计实现
一、饿汉模式// 保证全局(整个进程)只有唯一实例对象// 饿汉模式 : 一开始就创建对象,特点简单// 缺陷1:// 多个单例对象A B C,假设要求他们之间有依赖关系:依次创建初始化A 、 B 、 C// 饿汉模式无法保证顺序// 缺陷2:可能会导致程序启动慢class Singleton{public: Singleton& GetInstance() { return _sins; }private: Singleton() {} Singleton
2021-07-28 19:16:29 155
原创 C++智能指针及模拟实现
一、智能指针概念、原理及其使用(一)概念当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。(二)原理1.RAII(Resource Acquisition Is Ini
2021-07-28 19:07:46 208
原创 高并发内存池项目(concurrent memory pool)
一、高并内存池概念内存池(Memory Pool) 是一种动态内存分配与管理技术。 通常情况下,程序员习惯直接使用 new、delete、malloc、free 等API申请分配和释放内存,这样导致的后果是:当程序长时间运行时,由于所申请内存块的大小不定,频繁使用时会造成大量的内存碎片从而降低程序和操作系统的性能。内存池则是在真正使用内存之前,先申请分配一大块内存(内存池)留作备用,当程序员申请内存时,从池中取出一块动态分配,当程序员释放内存时,将释放的内存再放入池内,再次申请池可以 再取出来使用,并尽
2021-07-28 12:35:32 1632
原创 常见七大排序算法总结--超详细适合初学者
一、排序算法的概念以及应用(一)概念所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。(二)分类内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。(三)应用1.淘宝京东商品的销量排名2.各大高校的综合实力排名3.以及各大城市GDP排名4.外卖评分以及百度竞价排名(四)常见的排序算法二、排序算法的实现(升序排列)(一)
2021-07-26 17:59:52 1732
原创 数据结构学习笔记------红黑树(呕心沥血版!!!!)
一、红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。二、红黑树的性质三、红黑树的定义与结构四、红黑树的插入、验证与删除(一)插入(二)验证(三)删除五、红黑树的应用六、红黑树与AVL树的比较...
2021-06-02 16:37:02 264
原创 每日一题(day2)-----有假币
一、跳石板1.描述【解题思路】:平均分三份是最快的方法,两份进行称重(对比出三个的重量),后对最重的那份再次进行称重,直到称重的个数不足2个时则结束,获得假币如果无法平均分3分则余数要么是1要么是2,因为是要最多称几次,n=n/3+1满足每次取最大分称3份,取两份一样多的过秤,然后把三份中最多的那份继续分,直到硬币剩余0或1时截止。2.代码实现#include<iostream>using namespace std;int main(){ int n=0;
2021-06-01 11:51:15 128
原创 每日一题(day1)-----跳石板、最难问题、因子个数
代码实现#include<iostream>#include<vector>#include<algorithm>using namespace std;//求约数void get_y(int n,vector<int>& y){ for(int i=2;i<=sqrt(n);++i) { if(n%i==0) { y.push_back(i); .
2021-05-31 18:12:56 133
原创 数据结构学习笔记-----AVL树节点插入中平衡因子的调节及旋转问题
目录一、AVL树(一)概念(二)定义二、AVL树的插入(一)先按照二叉搜索树的规则将节点插入到AVL树中(二)平衡因子调节1.调节过程2.代码实现(三)旋转1.概念2.新节点插入较高左子树的左侧---左左:右单旋3.新节点插入较高右子树的右侧---右右:左单旋4. 新节点插入较高左子树的右侧---左右:先左单旋再右单旋5.新节点插入较高右子树的左侧---右左:先右单旋再左单旋一、AVL 树(一)概念对于一个AVL树,它是一个高度平衡的搜.
2021-05-26 17:14:45 2282
原创 Linux学习笔记-----vim下多行代码注释与取消
一、注释多行代码1.将光标打到多行代码起始处,比如这里我需要注释73-81行代码,我将光标打到73行处。2.按下Ctrl+V进入VISUAL BLOCK模式,这里我们使用h(左) j (下) k(上) l(右)这四个键来进行操作,一定不要使用键盘的箭头,亲测无效。如下,我们使用j (下)键走到81行。3.接着按下大写的I 键或者按Shift+i (两个效果一样,都是大写I)切换到输入模式,直接输入注释符号//,再按下Esc就可完成注释了。二、取消注释多行代...
2021-05-19 18:11:40 1877
原创 二叉树的前中后序遍历-----非递归迭代实现 面试冲冲冲!!!
目录一、二叉树的前中后序遍历概念(一)前序遍历(二)中序遍历(三)后序遍历(四)层序遍历二、二叉树前序遍历(一)题目描述(二)思路(三)程序实现三、二叉树中序遍历(一)题目描述(二)思路(三)程序实现四、二叉树后序遍历(一)题目描述(二)思路(三)程序实现以下是整理了一晚上的二叉树三种非递归遍历方式,关于非递归遍历,有一个大的特点就是代码简单,但是难以理解。面试中常常考察我们的非递归迭代实现,而主要以后序遍历为重点!!一、.
2021-05-17 21:36:34 209
原创 Linux学习笔记-----网络编程套接字
一 、概念(一)端口号概念端口号标定该主机上互联网中唯一一个进程。 进程ID是每个进程都有的,但是端口号只有是网络进程才给指派端口号。 一个端口号用来标识一个进程,一个进程可以绑定多个端口号。一个进程可以同时拥有端口和pid。 传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 "数据是谁发的, 要发给谁"。(二)套接字概念所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,套接字编程本质是进程间
2021-05-16 21:17:18 525 1
原创 Linux学习笔记-----网络初识
一、计算机网络发展历程独立模式: 计算机之间相互独立。 网络互联: 多台计算机连接在一起, 完成数据共享。 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起。 广域网WAN: 将远隔千里的计算机都连在一起。所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。 为什么会产生计算机网络?本质就是线变长了导致了信息传输不统一。二、协议(一)概念协议本质是两台计算机中的一种约定。 行业
2021-05-13 20:16:41 166
原创 c++学习笔记-----继承与多态
一、继承面向对象三大特性:(严格来说不止三种)最重要三种封装、继承、多态, 其他:抽象、反射(Java)。 封装本质是一种更好的管理,相比c语言面向过程,数据和方法都放到类中进行管理,在通过访问限定符进行限制。 相对C语言面向过程,数据和方法都放到类中进行管理,再通过访问限定符进行限制。(一)概念继承是为了从类设计的角度避免重复定义数据和方法,进行类角度的复用。(二)父类在子类中的访问方式在子类的访问方式=权限min(基类的访问方式,继承方式)publ...
2021-05-04 22:41:14 629
原创 linux下“Found a swap file by the name “~/.local/share/nvim/swap...“解决方案
一般当我们在linux下使用vim编辑代码时,突然电脑断网导致云服务器与我们电脑断开连接,当电脑连上网后,再次登录该文件,会弹出如下窗口。解决方案:一、选中生成出错文件的路径,右键复制该路径。复制是从 ~ 一直到 .swp。二、输入q退出该界面。输入q后直接会退出该界面。三、输入rm+刚刚复制的内容输入rm加上刚刚复制的内容我们发现还没有按回车,直接画面就变成这个样子了,至于为什么这样子,我也不知道,本来一步就可以删除成功的。接下来我们还需要在操作一步。四、右键继续复制选.
2021-05-02 22:15:01 696 1
原创 Linux学习笔记-----多线程
一、线程概念(一)什么是线程?在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。 在Linux系统中,Linux中,没有真正意义上的线程,线程是用进程模拟的,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。 线程:调度的基本单位,线程是进程里面的执行流,并且线程在进程的地址空间内运行。进程:线程 1 : n(二)创建一个.
2021-05-02 19:13:15 545
原创 c++学习笔记-----stack和栈
一、stack介绍及使用(一)stack介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口,而stack容器适配器相当于借用deque(双端队列)的底层结构来实现stack结构。(二)stack使用template<class T, class Con =
2021-04-22 00:03:56 477
原创 Linux学习笔记-----进程信号
一、信号概念1.信号是进程之间事件异步通知的一种方式,属于软中断。2.在一个bash(终端)中,只允许有一个前台进程。3.所有信号都必须经过操作系统的手发出。4.用kill-l可以查看系统定义的信号列表。5.普通信号可以发送多次,但是只进入一次,所以有可能丢失。6.实时信号实时性比较强,来了立即处理,信号不会丢失,在系统层面采用链表进行管理。Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程
2021-04-19 21:59:48 178
原创 c++学习笔记-----list
一、list的介绍及使用(一)什么是list1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、
2021-04-14 18:16:18 273
原创 c++学习笔记-----vector
一、vector的介绍及使用(一)什么是vector?vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。它的内部成员实际上是start、finish和endofstorage三个指针构成,起始指针为start,而finish指向最后一个数据,也就是size大小
2021-04-13 18:54:09 189
原创 Linux学习笔记-----进程间通信(管道及共享内存)
要让两个不同进程通信,前提条件是让两个进程看到同一资源。对于进程间要相互通信,我们引入管道和共享内存概念管道是Unix中最古老的进程间通信的形式,要让两个不同进程通信,前提条件是让两个进程看到同一资源。管道的生命周期是随进程的。共享内存是进程通信中最快的,ipc的生命周期随内核,共享内存底层不提供任何的互斥机制。一、匿名管道匿名管道用于进程之间通信,且仅限于本地父子进程之间通信(兄弟、爷孙之间都可以,只要有亲缘关系),结构简单,类似于一根非水平状态的水管,一端进水另一端出水(单工)。相对于命.
2021-04-06 17:14:38 289
原创 Linux学习笔记-----系统文件基础I/O接口及文件系统
一、系统文件I/O接口(一)open函数功能:进行打开文件操作函数头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>函数接口:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);pathname: 要打开或创建的目标文件flag
2021-04-01 22:10:30 247
原创 c++学习笔记-----实现一个简易string
面试中我们可能被要求编写一个简单string类函数,那我们要清楚实现一个简易string,对于共有成员我们需要构造函数、构造拷贝函数、析构函数、[ ]重载、以及赋值重载,私有成员我们只需要定义它的_str就好,这都是需要我们实现的。在这之前我们先要理解深浅拷贝这一概念,浅拷贝简单理解就是值拷贝,它是相当于s2把s1的值拷贝过去,两个类同时共用一块空间,程序结束时s1调析构函数析构s1这一空间,s2在调用析构时这一空间已经被释放过了,系统则会报错。string s1(s2);而深拷贝则是在对s1进行拷
2021-04-01 18:48:20 132
原创 c++学习笔记-----内存管理
一、C/C++内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。二、C语言中malloc/calloc/realloc的区别说起他们三个区别,其实最简单理解,malloc就是向内存(堆)申请一块未初始化的空间,calloc是在申请空间后,将申
2021-03-12 20:40:31 199
原创 c++学习笔记-----this指针、构造函数、析构函数和友元函数
一、this指针**1.概念理解:**说起this指针,我个人的理解就是假如我们生产了同一种型号的两个杯子,当张三要买的时候,我们就用一个工具(this指针)给该杯子底部刻上张三的名字用来识别是张三,当李四要买,我们就给杯子刻上李四的名字,这样虽然是两个一摸一样的杯子,但是底部都有名字用来区分杯子是属于谁的。class Date{public :void Set(int year , int month , int day){_year = year;_month = month;_day
2021-03-11 23:11:30 384 1
原创 Linux学习笔记-----地址空间
一、研究背景1.kernel 2.6.322.32位平台二、概念及理解地址空间,不是物理内存,我们在语言上打印出来的地址,其实都叫做“虚拟地址”。它是对物理内存的一种虚拟化表示,虚拟空间,最终一定要以某种方式转化到物理内存进程运行时具有独立性的,在数据层面上先进行独立。物理地址,用户一概看不到,由OS统一管理。三、为什么要有地址空间?如果没有地址空间我们进程访问的地址都是物理地址,将会直接对地址进行操作,如果产生了一些野指针将会写坏别人的空间或者数据。一个进程的数据真正在内存存放的位置,是不
2021-03-08 14:34:30 128
原创 Linux学习笔记-----fork()函数理解
一、认识fork函数1.含义:在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程,它没有任何参数。2.返回值:它有两个返回值,它的返回值是给调用后的父进程返回子进程的pid,如果调用成功,给子进程返回0值,可以把fork函数理解成一个单链表,它一方面可以显示自己,另一方面可以指向下一个结点,如果该节点为空则返回0.如果该进程创建失败,则返回-1.3.用法:一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子
2021-03-06 15:33:27 445
原创 c++学习笔记-----引用、类和对象概念总结
一、引用(一)概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如孙悟空的别名叫做孙猴子,但是不管是孙猴子还是孙悟空都是指的同一个人。int a=1;int& b=a;如上,b是a的别名,a是b的引用,注意这里&符号不是取地址。(二)作用1.我们经常使用引用来做输出型参数或者大对象引用传参这样可以提高效率。void swap(int& a,int& b){ int tmp=a
2021-02-01 19:03:37 466
原创 Linux学习笔记-----缓冲区概念及git使用
一、编译文件,编译器是如何知道我的生成软件需要被重新编译了?根据文件的修改时间来的,因为用户不可能同时修改多个问题,所以文件修改总是有先后顺序的。又因为,源文件和可执行程序时间总是交叉。二、缓冲区概念及理解1.概念:就是一块内存,刷新策略,行刷新/程序结束/强制刷新,也可以理解假设A地有1000件货物,需要运送到B地,如果人为只能一次搬1件,效率特别低,如果我们使用汽车一次可以搬运500件运送货物,这样两次就可以搬完,效率大大提高,这里的货车我们可以理解为缓冲区,货车既可以帮此地运送物资也可以帮别的地
2021-01-30 10:52:49 273 1
原创 数据结构笔记-----排序方法之计数排序(非比较排序)
一、程序思想及步骤(一)思想计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。(二)步骤通过遍历原数组,数组中每个数的值是多少就对统计次数的数组位++,从而统计出数组每个数出现的次数。根据统计的结果将该数放回到原来的数组中3.确定统计次数数组的范围,通过步骤1遍历原数组从而得到最大值和最小值,从而确定范围。(三)演示1.如下图,要对该数组进行计数排序,首先遍历该数组可知该数组范围为[0,5]其中0出现了2次,1出现了0次,2出现了2次,3出现了3次,4出现了0次,5出现了1次。2
2021-01-27 18:53:51 178
原创 Linux学习笔记-----文件权限更改
一.用echo指令给文件写入新的内容1.当我们使用echo指令对txt文件连续写入全新的内容时,我们不能使用>号,而应该使用>>,>相当于在原内容覆盖该内容,而>>则是增添新内容。如下图二、目录读(r)、写(w)、进入(x)权限说明1.目录的读权限,含义是允许查看目录下的文件file。2.目录的写权限,含义是是否允许特定角色在指定目录下创建文件file。3.目录的x表示是否可以进入该目录。说明:当一个目录不具有x权限时,就算该目录下的文件具有读写权限也无
2021-01-25 23:22:27 323
原创 Linux下新用户创建、登录以及删除操作小白学习分享
一提到Linux用户,不得不提到一个超级用户和普通用户的概念**超级用户(root)**它是可以在linux系统下做任何事情,不受限制。它只能有一个。普通用户则是在linux下做有限的事情。它可以有多个。**一、创建新普通用户**当我们在第一次使用linux时最开始都是只有一个超级用户(root),而普通用户则是用过超级用户进行创建而形成的,所以我们首先来在超级用户下进行创建一个普通用户**1.**首先进入linux系统中输入指令 whoami 显示root则表示当前用户为超级用户,接下来我
2021-01-23 12:55:06 2980
原创 新学一种c语言写法
if(num == 5) 与if(5 == num)语句后者更优于前者,在一段程序中,漏写一个=前者运行不容易找到错误,后者在漏写的时候就已经报错。
2020-12-20 21:43:21 243 1
原创 来到CSDN社区的第一天!
大家好,我是一名在读大学生,小白一枚,本身也比较喜欢编程,看到别的程序技术控超级羡慕,所以想在这一行深扎下去,希望通过自己的努力有朝一日可以成为一名编程界大佬!!!
2020-12-18 22:21:08 643 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人