自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 【C++】-- 内存管理new和delete详解

new和delete是C++向内存申请空间和释放空间的操作符:(1)new会调用构造函数对类对象进行初始化;(2)delete会调用析构函数进行资源清理

2022-04-28 23:31:19 4309 71

原创 【LeetCode】-27. 移除元素

给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。

2023-03-24 19:00:00 2

原创 【LeetCode】-35.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

2023-03-23 19:00:00 8

原创 【LeetCode】-26. 删除有序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

2023-03-22 22:24:35 162

原创 【Linux】-- 进程控制

进程调用fork,当控制转移到内核中的fork代码后,内核做以下动作:分配新的内存块和内核数据结构给子进程、将父进程部分数据结构内容拷贝至子进程、添加子进程到系统进程列表中、fork返回,调度器开始调度

2023-03-13 23:14:21 939 24

原创 【Linux】-- 进程概念

当我们写完代码之后,编译连接就形成一个可执行程序.exe,本质是二进制文件,在磁盘上存放着。双击这个.exe文件把程序运行起来就是把程序从磁盘加载到内存,然后CPU才能执行其代码语句。当把程序加载到内存后,这个程序就叫做进程。所有启动程序的过程,本质都是在系统上创建进程,双击.exe文件也不例外

2023-01-30 17:13:57 1396 29

原创 【Linux】-- 初识操作系统

操作系统是专门针对软硬件资源进行管理工作的软件。操作系统没启动之前在磁盘或外设,只有把操作系统加载到内存,操作系统才有意义。操作系统存在的意义在于,对下管理好软硬件资源。对上给用户提供稳定的、高效的、安全的运行环境。

2022-11-30 17:56:44 805 30

原创 【Linux】-- 开发工具yum、vim、gcc、g++、gdb、make、makefile使用介绍

在了解yum之前,先了解RPM,RPM在linux中是一种用于互联网下载包的打包及安装工具,它能够进行打包、安装、查询、升级、卸载、校验、数据库管理。一个RPM包中的应用程序,除了自身所带的附加文件保证其正常以外,还需要其他特定版本文件,这就是软件包的依赖关系,程序与程序之间的依赖关系比较复杂,而RPM无法解决软件包的依赖关系。yum(Yellow dog Updater, Modified)是Shell前端软件包管理器,即linux下进行软件安装的客户端,能够从服务器自动下载RPM包并安装,能够自

2022-11-21 11:34:48 1256 48

原创 【Linux】-- Shell命令运行原理和权限详解

Linux作为一个操作系统,称为"kernel",一般用户不能直接使用kernel,而通过"kernel"的外壳程序"Shell"和kernel进行沟通。所以广义上Linux发行版=Linux内核+外壳程序,狭义上Linux发行版=Linux内核。Shell作为外壳程序,包裹在Linux内核外层,是一个应用程序,通过一系列的Linux命令对操作系统 发出相关治疗提供人际界面。它连接了用户和Linux内核,让用户更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。

2022-10-12 06:00:00 1324 15

原创 【Linux】-- 入门基础命令

Linux 内核最初由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。是开放源代码的类UNIX操作系统,可以免费使用和自由传播,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2022-10-10 06:00:00 603 4

原创 【C++】-- 哈希应用之布隆过滤器

布隆过滤器是一种紧凑的、巧妙的概率型数据结构,能够高效插入查询,来判断一个元素在或不在,用多个哈希函数,把一个数据映射到位图中,不仅能提高查询效率,还能节省空间

2022-10-02 06:00:00 779 16

原创 【C++】-- STL之位图

位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在

2022-09-27 06:00:00 1172 16

原创 【C++】-- STL之用哈希桶模拟实现unordered_set和unordered_map

用哈希桶封装实现unordered_set和unordered_map,就要考虑到他们传给哈系统的数据元素不同,unordered_set传给哈希桶的是k,unordered_map传给哈希桶的是pair,那么哈希桶面对这两种不同的数据,如何做到统一处理呢?面对unordered_set传给哈希桶的是k,unordered_map传给哈希桶的是pair,就把K和V统一封装成T,用T代替pair:

2022-09-23 06:00:00 623 23

原创 【C++】-- 哈希算法

如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的key之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。向该结构中插入元素和查找元素时:插入元素:将元素key存放到用hashFunc计算出的元素key的位置。查找元素:对元素的key进行计算,把用hashFunc计算的函数值当做元素的存储位置,在哈希结构中按此位置取元素比较,若key相等,则查找成功。

2022-09-20 17:09:58 1772 26

原创 【C++】-- STL之unordered_map/unordered_set详解

STL有两种容器:序列式容器和关联式容器,序列式容器vetor/lost/deque,用来存储数据。关联式容器map/set/unordered_map/unordered_set用来存储数据+查找数据。unordered_map和unordered_set是c++里面两个提供哈希表的容器,map和set底层是红黑树,unordered_map和unordered_set的底层是哈希表(散列表),是一种映射。

2022-09-13 17:47:11 901 14

原创 【C++】-- STL之用红黑树模拟实现map和set

用红黑树同时封装出set和map时,set传给value的是一个value,map传给value的是一个pair,set和map传给红黑树的value决定了这棵树里面存的节点值类型。上层容器不同,底层红黑树的Key和T也不同。

2022-09-08 17:12:19 488 24

原创 【C++】-- 红黑树详解

红黑树也是一种二叉搜索树,在每个结点上增加一个存储位,来表示该节点的颜色,节点要么是红色要么是黑色。满足以下性质:(1)每个结点不是红色就是黑色(2)根节点是黑色的(3)没有连续的红色节点(4)每条路径上都包含相同数目的黑色节点

2022-09-06 10:56:20 729 12

原创 【C++】-- AVL树详解

一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:(1)它的左右子树都是AVL树(2)左右子树高度之差(简称平衡因子=右子树高度-左子树高度)的绝对值不超过1(-1/0/1)

2022-08-31 15:58:55 1033 38

原创 【LeetCode】-- 692. 前K个高频单词

给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序排序。

2022-08-29 10:59:48 157 20

原创 【C++】-- STL之map和set详解

关联式容器也是用来存储数据的, 不过里面存储的是键值对,数据检索时,效率比序列式容器高。STL有两种关联式容器:树形结构和哈希结构。树形结构的关联式容器有4种:set、map 、multiset、mapltimap,它们的底层都是平衡搜索树(红黑树)。...

2022-08-26 09:54:23 598 16

原创 【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树

给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。

2022-08-20 09:49:50 84 27

原创 【LeetCode】-- 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。

2022-08-18 11:28:38 183 6

原创 【LeetCode】-- 145. 二叉树的后序遍历

给你一棵二叉树的根节点root,返回其节点值的后序遍历。

2022-08-16 23:54:07 103 17

原创 【LeetCode】-- 94. 二叉树的中序遍历

给定一个二叉树的根节点root,返回它的中序遍历

2022-08-15 10:30:00 69 18

原创 【LeetCode】-- 144. 二叉树的前序遍历

给你二叉树的根节点root,返回它节点值的前序遍历。

2022-08-14 10:00:00 93 4

原创 【LeetCode】-- 236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”............

2022-08-13 07:30:00 109 7

原创 【LeetCode】-- 107. 二叉树的层序遍历 II

给你二叉树的根节点root,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

2022-08-12 09:15:00 50 10

原创 【LeetCode】-- 606. 根据二叉树创建字符串

给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。......

2022-08-11 10:15:00 77 10

原创 【C++】-- 搜索二叉树

二叉搜索树也叫做二叉排序树,它要么是一棵空树,要么具有以下性质:(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值(3)它的左右子树也分别为二叉搜索树......

2022-08-09 19:54:20 4518 23

原创 【C++】-- 多态

动态多态是指不同类型对象完成一件事的时候产生的动作不一样,那么结果也不一样。在继承中要构成多态有两个条件,缺一不可:(1)必须通过父类的指针或者引用调用虚函数(2)被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写动态多态父类指针或引用的指向:(1)父类指针或引用指向父类,调用的就是父类虚函数(2)父类指针或引用指向哪个子类,调用的就是哪个子类重写的虚函数根据切片规则,父类的指针既可以指向父类,又可以指向子类,如果有多个子类,就可以指向不同类型。............

2022-08-01 08:46:11 1737 28

原创 【C++】-- 继承

继承机制是面向对象程序设计使代码可以复用的最重要的手段,该机制自动地为一个类提供来自另一个类的操作和数据结构。只需要在新类中定义已有的类中没有的成分来建立一个新类。继承是类设计层次的复用。...

2022-07-26 17:27:35 1687 22

原创 【C++】-- IO流

输入输出缓冲区的作用:(1) 可以屏蔽低级IO的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。(2)可以使这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以 定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。........................

2022-07-10 23:27:10 563 52

原创 【C++】-- 模板进阶

有时候,编译默认函数模板或者类模板不能正确处理需要的逻辑,需要针对指定类型进行特殊化处理,就要做模板的特化。模板的特化是在原有模板的基础上,针对特殊类型,所进行特殊化的实现方式。模板特化分为函数模板特化和类模板特化。函数模板特化的步骤:(1)必须有基础模板函数(2)template后面跟一对空的尖括号(3)函数名后跟一对尖括号,用来指定特化的类型(4)函数形参表:必须要和模板函数的基础参数类型完全相同,否则编译器报错。.........

2022-06-21 16:05:07 593 53

原创 【C++】-- STL容器适配器之priority_queue

priority_queue即优先级队列,是一种容器适配器,最大元素放在第一个。底层用堆实现,默认是大堆,因为默认大的优先级高,可随时插入元素,可快速查找最大元素,即优先级队列中第一个元素。优先级队列元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问...

2022-06-18 14:39:08 1637 45

原创 【C++】-- STL容器适配器之底层deque浅析

在【C++】-- STL容器适配器之stack一文中介绍了容器适配器的概念,容器适配器是一个封装了序列容器的类模板,对容器进行了转换,转换成栈的后进先出和队列的先进先出的等模板。虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque作为容器:那么deque到底是什么呢?有什么优势使得stack和queue都以它作为底层默认容器,对它进行包装

2022-06-17 13:34:13 635 14

原创 【LeetCode】-- 102. 二叉树的层序遍历

给你二叉树的根节点root,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)。

2022-06-17 09:10:21 130 22

原创 【LeetCode】-- 225. 用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。......

2022-06-16 10:18:53 83 16

原创 【LeetCode】-- 15.最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。......

2022-06-14 10:00:00 86 27

原创 【LeetCode】-- 150. 逆波兰表达式求值

根据逆波兰表示法,求表达式的值。有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意:两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。...

2022-06-13 23:21:02 67 7

原创 【LeetCode】-- 剑指 Offer 31. 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。...............

2022-06-13 12:57:22 63 10

杨辉三角动态演示过程示意图

杨辉三角动态演示过程示意图

2022-05-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除