- 博客(90)
- 资源 (1)
- 收藏
- 关注
原创 【C++】-- 内存管理new和delete详解
new和delete是C++向内存申请空间和释放空间的操作符:(1)new会调用构造函数对类对象进行初始化;(2)delete会调用析构函数进行资源清理
2022-04-28 23:31:19 7121 74
原创 【Linux】-- 进程间通信
之前学习的进程,都是各自运行,互不干扰,进程之间没有协同。然而有许多场景下是需要进程之间相互协同的,由于进程是程序员写的,因此进程之间的协同本质上就是程序员之间的协同,比如一个程序员从数据库里面拿数据,另一个程序员要把从数据库里面拿到的数据进行格式化,写成特定格式,还有一个程序员根据格式化的数据进行统计,如果把这些工作量当成意见工作去处理的话,如果其中这三个环节有任何一个环节出错了,那么这个工作就进行不下去了,需要逐一去排查到底是哪个环节出错了,耗时久且效率低。
2023-08-08 20:29:13 1422 9
原创 【Linux】-- 基础IO和动静态库
C程序会默认打开三个输入输出流:stdin, stdout, stderr,C语言会把标准输入输出流和标准错误当文件处理,流就是向硬件记录。Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2,因此连续打开多个文件时,底层给文件分配的文件描述符分别是连续递增的整数。还有动静态库如何打包和使用
2023-05-25 18:23:26 1292 14
原创 【LeetCode】- 88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。
2023-05-08 08:00:00 301
原创 【LeetCode】-66. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
2023-05-06 14:20:24 679
原创 【LeetCode】-- 119. 杨辉三角 II
给定一个非负索引rowIndex,返回「杨辉三角」的第rowIndex行。在「杨辉三角」中,每个数是它左上方和右上方的数的和
2023-04-11 16:22:53 155 1
原创 【LeetCode】-- 108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
2023-04-07 11:12:36 392
原创 【LeetCode】-27. 移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。
2023-03-24 19:00:00 89
原创 【LeetCode】-35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
2023-03-23 19:00:00 104
原创 【LeetCode】-26. 删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
2023-03-22 22:24:35 468
原创 【Linux】-- 进程控制
进程调用fork,当控制转移到内核中的fork代码后,内核做以下动作:分配新的内存块和内核数据结构给子进程、将父进程部分数据结构内容拷贝至子进程、添加子进程到系统进程列表中、fork返回,调度器开始调度
2023-03-13 23:14:21 1395 24
原创 【Linux】-- 进程概念
当我们写完代码之后,编译连接就形成一个可执行程序.exe,本质是二进制文件,在磁盘上存放着。双击这个.exe文件把程序运行起来就是把程序从磁盘加载到内存,然后CPU才能执行其代码语句。当把程序加载到内存后,这个程序就叫做进程。所有启动程序的过程,本质都是在系统上创建进程,双击.exe文件也不例外
2023-01-30 17:13:57 2340 29
原创 【Linux】-- 初识操作系统
操作系统是专门针对软硬件资源进行管理工作的软件。操作系统没启动之前在磁盘或外设,只有把操作系统加载到内存,操作系统才有意义。操作系统存在的意义在于,对下管理好软硬件资源。对上给用户提供稳定的、高效的、安全的运行环境。
2022-11-30 17:56:44 1048 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 2334 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 2449 15
原创 【Linux】-- 入门基础命令
Linux 内核最初由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。是开放源代码的类UNIX操作系统,可以免费使用和自由传播,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2022-10-10 06:00:00 5083 5
原创 【C++】-- 哈希应用之布隆过滤器
布隆过滤器是一种紧凑的、巧妙的概率型数据结构,能够高效插入查询,来判断一个元素在或不在,用多个哈希函数,把一个数据映射到位图中,不仅能提高查询效率,还能节省空间
2022-10-02 06:00:00 1790 16
原创 【C++】-- STL之位图
位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在
2022-09-27 06:00:00 2174 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 826 23
原创 【C++】-- 哈希算法
如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的key之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。向该结构中插入元素和查找元素时:插入元素:将元素key存放到用hashFunc计算出的元素key的位置。查找元素:对元素的key进行计算,把用hashFunc计算的函数值当做元素的存储位置,在哈希结构中按此位置取元素比较,若key相等,则查找成功。
2022-09-20 17:09:58 5858 28
原创 【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 2446 14
原创 【C++】-- STL之用红黑树模拟实现map和set
用红黑树同时封装出set和map时,set传给value的是一个value,map传给value的是一个pair,set和map传给红黑树的value决定了这棵树里面存的节点值类型。上层容器不同,底层红黑树的Key和T也不同。
2022-09-08 17:12:19 1105 24
原创 【C++】-- 红黑树详解
红黑树也是一种二叉搜索树,在每个结点上增加一个存储位,来表示该节点的颜色,节点要么是红色要么是黑色。满足以下性质:(1)每个结点不是红色就是黑色(2)根节点是黑色的(3)没有连续的红色节点(4)每条路径上都包含相同数目的黑色节点
2022-09-06 10:56:20 1401 12
原创 【C++】-- AVL树详解
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:(1)它的左右子树都是AVL树(2)左右子树高度之差(简称平衡因子=右子树高度-左子树高度)的绝对值不超过1(-1/0/1)
2022-08-31 15:58:55 2499 42
原创 【LeetCode】-- 692. 前K个高频单词
给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序排序。
2022-08-29 10:59:48 264 20
原创 【C++】-- STL之map和set详解
关联式容器也是用来存储数据的, 不过里面存储的是键值对,数据检索时,效率比序列式容器高。STL有两种关联式容器:树形结构和哈希结构。树形结构的关联式容器有4种:set、map 、multiset、mapltimap,它们的底层都是平衡搜索树(红黑树)。...
2022-08-26 09:54:23 1143 16
原创 【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树
给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。
2022-08-20 09:49:50 491 27
原创 【LeetCode】-- 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
2022-08-18 11:28:38 441 6
原创 【LeetCode】-- 236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”............
2022-08-13 07:30:00 214 7
原创 【LeetCode】-- 107. 二叉树的层序遍历 II
给你二叉树的根节点root,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
2022-08-12 09:15:00 180 10
原创 【LeetCode】-- 606. 根据二叉树创建字符串
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。......
2022-08-11 10:15:00 251 10
原创 【C++】-- 搜索二叉树
二叉搜索树也叫做二叉排序树,它要么是一棵空树,要么具有以下性质:(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值(3)它的左右子树也分别为二叉搜索树......
2022-08-09 19:54:20 4825 23
原创 【C++】-- 多态
动态多态是指不同类型对象完成一件事的时候产生的动作不一样,那么结果也不一样。在继承中要构成多态有两个条件,缺一不可:(1)必须通过父类的指针或者引用调用虚函数(2)被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写动态多态父类指针或引用的指向:(1)父类指针或引用指向父类,调用的就是父类虚函数(2)父类指针或引用指向哪个子类,调用的就是哪个子类重写的虚函数根据切片规则,父类的指针既可以指向父类,又可以指向子类,如果有多个子类,就可以指向不同类型。............
2022-08-01 08:46:11 2056 32
原创 【C++】-- 继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,该机制自动地为一个类提供来自另一个类的操作和数据结构。只需要在新类中定义已有的类中没有的成分来建立一个新类。继承是类设计层次的复用。...
2022-07-26 17:27:35 1969 22
原创 【C++】-- IO流
输入输出缓冲区的作用:(1) 可以屏蔽低级IO的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。(2)可以使这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以 定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。........................
2022-07-10 23:27:10 826 52
原创 【C++】-- 模板进阶
有时候,编译默认函数模板或者类模板不能正确处理需要的逻辑,需要针对指定类型进行特殊化处理,就要做模板的特化。模板的特化是在原有模板的基础上,针对特殊类型,所进行特殊化的实现方式。模板特化分为函数模板特化和类模板特化。函数模板特化的步骤:(1)必须有基础模板函数(2)template后面跟一对空的尖括号(3)函数名后跟一对尖括号,用来指定特化的类型(4)函数形参表:必须要和模板函数的基础参数类型完全相同,否则编译器报错。.........
2022-06-21 16:05:07 741 53
原创 【C++】-- STL容器适配器之priority_queue
priority_queue即优先级队列,是一种容器适配器,最大元素放在第一个。底层用堆实现,默认是大堆,因为默认大的优先级高,可随时插入元素,可快速查找最大元素,即优先级队列中第一个元素。优先级队列元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问...
2022-06-18 14:39:08 2467 46
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人