自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 问答 (1)
  • 收藏
  • 关注

原创 [排序算法] 常见排序算法原理及代码实现

文章目录插入排序----直接插入排序插入排序----希尔排序选择排序---最简单的选择排序各排序算法对比插入排序----直接插入排序思路:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。// 直接插入排序void InsertSort(int* a, int n){ for (int i = 0; i < n - 1; i++) { //将tmp插入到[0,end]这个有序序列 int end = i;

2021-08-18 14:40:07 228

原创 [C++] 红黑树详解

文章目录红黑树红黑树和AVL树对比红黑树的结构红黑树的插入情况一情况二情况三红黑树红黑树,一种特殊的二叉搜索树, 为每个结点描述了颜色(红色或黑色),通过对所有结点的着色方式限制,红黑树确保了没有一条路径会比其他路径的长度超出两倍,因而是近似平衡的。红黑树的性质:红黑树通过以下性质来实现近似平衡结构:根节点是黑色的 ;每个结点不是红色就是黑色;如果一个节点是红色的,则它的两个孩子结点是黑色的 ; (红色结点不能连续出现)对于任意结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数

2021-05-22 13:13:39 2443 13

原创 【C++】AVL树:平衡二叉搜索树;插入,左旋,右旋,双旋

文章目录概述平衡因子概述平衡二叉搜索树又被称为AVL树,且具有以下性质:在AVL树中任何节点的两个子树的高度最大差别不超过1,所以它也被称为高度平衡树,并且它的左右两个子树都是一棵平衡二叉树。AVL树的增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。使用AVL树的可以防止二叉搜索树退化为单边树。平衡因子一个结点的右子树高度减去左子树高度所得的值,就是该节点的平衡因子,范围:[-1,1]...

2021-05-15 18:49:24 453

原创 [IOS]UITableView的用法

文章目录UITableView显示数据的步骤UITableView显示数据的步骤设置数据源对象数据源对象必须遵守UITableView的数据源协议UITableViewDataSource在数据源对象中必须实现UITableViewDataSource中某些特定的方法,这些方法告诉了数据源应该如何显示数据当UITableView运行起来的时候,会不断的调用数据源对象的这些方法,来获取对应的数据并显示出来...

2022-03-16 14:46:53 738

原创 [Objective-C]NSString和NSMutableString详解

NSString概述1.NSString是一个数据类型,用来保存OC字符串,一旦创建就无法修改2.NSString本质上是Fundation框架中的一个类,OC中的字符串本质上使用NSString对象来存储的创建标准的NSString对象1.创建空字符串 NSString *str0 = [NSString new]; NSString *str1 = [NSString string];2.简便创建方法 NSString *str = @"Master";注

2022-03-04 16:50:32 2511

原创 [Objective-C]NSDictionary与NSMutableDictionary详解

文章目录NSDictionaryNSDictionary字典数组的特点:NSdictionary数组与NSArray数组对比创建NSDictionary数组NSDictionary数组的使用遍历字典数组NSMutableDictionary特点:创建可变字典数组遍历字典数组添加元素删除元素数组的文件操作NSDictionaryNSDictionary字典数组的特点:1.都是数组,以键值对的形式存储数据的,向数组汇总存储数据的同时要为其指定别名,通过别名来查找数据,而不是通过下标2.字典数组一旦创建,

2022-03-02 14:21:57 2955

原创 [Objective-C]NSArray与NSMutableArray详解

NSArrayNSArray的特点: 1.只能存储OC对象 2.长度固定,一旦数组创建完成无法新增和删除元素 3.每个元素都是紧密相连的,可通过下标访问 4.元素是id类型的 5.必须以nil结尾,表示有效元素到此结束NSArray数组的使用: 1. 使用 %@ 可以打印NSArray数组中的所有内容 2. NSArray无法存储基本数据类型,无法存储非OC对象 3. 创建空数组没有意义 eg:NSArray *arr1 = [NSArray new];NSArray *arr2 =

2022-03-01 16:52:08 959

原创 DFS、BFS经典例题

文章目录深度优先搜索1.n张牌分别放进n个盒子,有几种方案2.leetcode 690 员工重要性3.leetcode 733 图像渲染4.leetcode 130 被围绕的区域5.leetcode 200 岛屿数量广度优先搜搜索1.走迷宫问题2.员工重要性3.N叉树的层序遍历深度优先搜索1.n张牌分别放进n个盒子,有几种方案思路:代码流程:DFS(){处理边界,向上回退尝试当前的每一种可能确定一种可能后,递归处理下一步----DFS(下一步)回收本次处理结果}#include

2021-09-13 19:48:03 487

原创 [Linux] IO多路转接模型

IO多路复用

2021-07-19 18:03:22 263 1

原创 [Linux] 典型IO

文章目录典型IO阻塞IO非阻塞IO信号驱动IO异步IO典型IOIO:即input、output-----输入输出;阻塞IO非阻塞IO信号驱动IO异步IO

2021-07-13 17:59:34 100

原创 MTU和MSS

MTU:最大传输单元MSS:最大数据段大小

2021-07-11 13:36:55 663 1

原创 网络基础:链路层协议:以太网协议、ARP协议

链路层负责相邻设备之间的的数据传输以太网协议-----eth协议:协议格式48位源端-对端mac地址:识别指定相邻的设备mac地址:uint8_t mac[6]-----网卡的物理硬件地址,出厂时就设置好了16位上层协议类型:用于数据分用时,上层协议的选择32位:数据帧尾:内含校验和,进行差错校验等操作ARP协议ARP协议:介于网络层与链路层之间的协议,通过IP地址获取MAC地址在局域网中广播ARP请求(smac+sip+0+dip) ,相邻设备收到ARP请求后,检测目的IP地址是否与自

2021-07-11 11:47:34 291

原创 网络基础:网络层的典型协议:IP协议、地址管理、路由选择

IP协议协议格式

2021-07-10 15:03:17 592 1

原创 网络基础:传输层的典型协议:TCP/UDP协议、三次握手、四次挥手

传输层传输层的功能:负责两个进程或者应用程序之间的数据传输UDP协议协议格式16位源端-对端端口:用于识别通信两端进程16位数据报长度:能够描述的最大数字为65535,即一个udp报文总大小不能超过64K16位校验和:采用二进制反码求和算法,用于校验接收到的数据与发送方的数据是否一致协议特性无连接:通信时不需要建立连接,只需要知道对方的地址就可以直接发送数据不可靠:不保证数据安全有序地到达对端面向数据报: 面向数据报的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一

2021-07-02 20:41:17 341 2

原创 Mysql进阶操作:数据库表约束,分组查询,数据库表关系,多表联查

数据库表约束分组查询数据库表关系多表联查

2021-06-29 17:18:25 233 1

原创 Mysql数据库的基础知识

了解mysqlmysql是一个关系型数据库:以库、表、行、列这种关系模型组织数据Mysql使用时的注意事项每日一条数据库操作语句都应该以分号 ;结尾,因为mysql支持换行操作mysql数据库对大小写不敏感,大小写皆可,通常关键字使用大写表示mysql数据库中哭的名称应该以英文字符或者一些符号起始,但是不允许以数字起始mysql数据库中哭的名称、表的名称、字段的名称都不能使用mysql关键字,比如create、database;如果非要使用,那就用反引号括起来库的操作查看mysql

2021-06-26 19:07:05 17448 2

原创 网络基础:应用层的典型协议:http协议、https协议

文章目录应用层自定制协议实例:网络计算器☆HTTP协议应用层应用层负责应用程序之间的沟通,程序员可以自己对数据的格式进行约定,消息发送方和接收方都需要遵守这种约定。应用层的典型协议:自定制协议;知名协议—HTTP协议自定制协议自定制协议:其实就是程序员自己定制的协议,程序员自己规定一种数据格式,按照这种数据格式进行网络通信,定制的同时要考虑数据的传输性能以及解析性能。实例:网络计算器客户端将两个数字以及运算符传输给服务端;服务端对数据进行运算后,将结果返回给客户端。我们此处使用结构体来组织数

2021-06-19 12:15:08 861

原创 [C++] STL之空间配置器

文章目录什么是空间配置器?为什么需要空间配置器一级空间配置器二级空间配置器内存池工作原理内存碎片问题什么是空间配置器?空间配置器,就是用来为各个容器高效的管理空间(空间的申请与回收)的为什么需要空间配置器在模拟实现vector、list、map、unordered_map等容器时,所有需要空间的地方都是通过new申请的,虽然代码可以正常运行,但是有以下不足之处:空间申请与释放需要用户自己管理,容易造成内存泄漏频繁向系统申请小块内存,容易造成内存碎片频繁向系统申请小块内存,影响程序运行效率

2021-06-06 18:52:53 256

原创 [C++] 类型转换:static_cast、reinterpret_cast、const_cast、dynamic_cast

static_cast支持所有的隐式类型转换,仅持支父类指针或者引用到子类指针或者引用的强制类型转换不支持其他的强制类型转换。reinterpret_cast支持强制类型转换const_cast去除变量的const属性,将常量去除常性,使其可以被修改。dynamic_cast只能用于多态场景下,父类的引用或指针向子类的引用或指针转换向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则)向下转型:父类对象指针/引用- >子类指针/引用(用dynamic_ca

2021-06-05 16:33:42 126

原创 [C++] 特殊类设计

设计一个类,只能在堆上创建对象方法:构造函数私有化,禁止在类外创建对象提供一个static成员函数在堆上创建对象(new),需要时再调用禁止拷贝,只声明拷贝构造,不实现;或者将拷贝构造声明为delete函数#include<iostream>using namespace std;class HeapObj {private: //构造函数私有化,禁止在类外创建对象 HeapObj() {} //防拷贝 //只声明,不实现 //或声明为delete函数 Heap

2021-06-05 15:12:10 107

原创 [C++] C++11中的线程库

文章目录线程库常用接口join()和deatch()原子性操作库线程库在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。常用接口函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动

2021-06-05 14:32:22 417

原创 组队竞赛、删除公共字符

题目一:组队竞赛解析:最主要的目标:要让每组的中间值最大,才能保证最后的总和最大步骤:将获取到的数组进行排序从后面取2个最大的数,从前面取1个最小的数组成一组循环第二步直到分组完毕将中间值进行累加求和这里还有一个问题 就是目标中的8、6、4这三个数组的位置如何求得?采用循环:for(int i=0;i<n;i++){ idx=arr.size()-2*(i+1)}例如:通过上述公式计算后,8在数组中的的位置是9-2*(0+1)=7;6的位置是9-2*(1+1)=5

2021-06-05 13:03:41 135

原创 最难的问题、质因子个数

题目一:思路:原文中的字母对应到密码中,要向后走五个字母,即A对F,B对G,C对H…那么密码对应到原文中就是向前走五个,观察可知密码中从E向后的任一字母向前走五位不需要翻转,而ABCDE翻译成原文时需要翻转到字母表的尾部,所以:当密码中的字母ch<=‘E’时,ch+=21可找到原文当密码中的字母ch>='E’时,ch-=5可以找到原文#include<stdio.h>int main(){ char ch; while ((ch=getchar()) !=

2021-05-31 21:31:05 257

原创 [C++] 哈希的应用:位图和布隆过滤器

思考问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯面试题】像这类题基础的思路应该排序+查找,但是这里题目要求有40亿个不同的整数,仅存储数据就要占用16G的内存,内存消耗过大,所以这里常规方法肯定行不通。采用位图解决:数据是否在给定的整形数据集合中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。如图:位图所谓位图,就是用每一个比特位来存放某种

2021-05-31 15:30:32 297 1

原创 [leetcode] 692.前K个高频单词

题目链接:leetcode 692思路先将每个单词及出现频数存放在map<string,int>中将map中的键值对交换顺序(将<string,int>变成<int,string>),并且按照出现频率从大到小的顺序存放在multimap<int,string>中遍历multimip,将前k个频率最高的单词插入到vector<string> 中返回目标vector对象class Solution {public: vect

2021-05-30 20:46:24 131

原创 哈希结构基础编程题

文章目录1.存在重复元素2.两句话中的不常见单词3.两个数组的交集1.存在重复元素leetcode链接思路:将数组中元素及出现次数存放在unordered_map中,遍历unordered_map,如果有出现次数大于1的,返回true;否则返回false。class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_map<int,int> m;

2021-05-27 11:46:19 133

原创 [C++] 哈希表(散列表)详解

文章目录概述插入元素搜索元素哈希函数常见的哈希函数哈希冲突闭散列线性探测闭散列增容闭散列--线性探测代码:★开散列开散列的增容哈希表的迭代器实现:开散列代码:概述哈希表又称散列表,是根据关键码值(Key,value)直接进行访问的数据结构。哈希结构中存在一种函数使元素的存储位置与它的关键码之间能够建立一一映射的关系,以便于在查找时通过该函数可以很快找到该元素。这种函数称为哈希函数。插入元素根据插入元素的关键码值,用哈希函数计算出插入位置进行存放。搜索元素用哈希函数计算出该元素的存储位置,然后在

2021-05-27 10:32:42 1378 3

原创 [剑指offer]JZ10 矩形覆盖

题目链接:矩形覆盖算法:动态规划时间复杂度:O(n)空间复杂度:O(1)逐步分析:总结规律:每一次的结果等于前两次的和f[n]=f[n-1]+f[n-2];初始值:f[1]=1,f[2]=2;class Solution {public: int rectCover(int number) { if(number==0||number==1||number==2) return number; int a=1,b=2,c;

2021-05-23 22:08:19 111

原创 [剑指offer]JZ1 二维数组中的查找

题目链接:二位数组中的查找第一种解法:暴力搜索没什么好讲的,遍历就完事了,注意判空!时间复杂度:O(n^2)空间复杂度:O(1)//暴力算法:时间:O(n^2) 空间:O(1)class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size()==0||array[0].size()==0) return

2021-05-23 21:18:07 102

原创 网络基础:套接字编程,UDP和TCP通信程序

文章目录字节序套接字编程客户端和服务端UDP通信程序字节序字节序:cpu对内存中数据进行存取的顺序主机字节序的分类:小端、大端小端:低地址存低位大端:低地址存高位编写代码判断主机字节序:#include<iostream>using namespace std;void check_sys1(){ int a = 1; char* b = (char*)&a; if (*b == 1) cout << "小端" << endl;

2021-05-21 14:13:20 436

原创 使用递归方法反转链表

题目链接:leetcode-反转链表思路:单链表的反转可以看作是每两个相邻结点之间链接关系的反转,所以我们可以将整个链表的反转分解成两个相邻结点之间的链接关系的反转。图示:代码:class Solution {public: ListNode* reverseList(ListNode* head) { if(head==nullptr||head->next==nullptr) return head; ListNod

2021-05-16 15:18:33 158

原创 网络基础 :网络发展背景、IP地址、端口、TCP/IP四层模型

文章目录协议网络模型OSI七层模型:TCP\IP五层(或四层)模型协议“协议” 其实就是一种约定。计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息.。要想传递各种不同的信息, 就需要约定好双方的数据格式。这种约定就是协议,要实现网络互连就必须要具有统一的协议。网络模型OSI七层模型:以提供的服务不同,将网络通信环境划分为7层:应用层、表示层、会话层、传输层、网络层、链路层、物理层但是由于该划分过于复杂繁琐,所以便产生了后过来优化过的TCP\

2021-05-16 11:43:41 396

原创 [手套]在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。

题目链接:手套思路:遇到这类题目不要慌,题目会给你一个固定的场景来求解,好像一个实际应用题,透过现象看本质,忽略它设定的场景,只关心我们需要的数据和他所要求的结果。举例说明:假设现在有红蓝绿黑四种颜色的数据若干个,现在问在不辨别颜色的前提下,至少要取多少次能凑出来一对颜色相同的数字。我们可以将一边的所有颜色数字都取到,然后再从另外一边任意取一个数字就能有一对相同颜色的数字,题目问的是至少多少次,所以这里我们不仅要满足要求,还要保证性能。如何保证每个颜色都取到:找出颜色最少的数字取一个,其余数.

2021-05-15 15:47:04 452 2

原创 查找输入整数二进制中1的个数

题目描述:解法一:将输入的整数和1进行按位与操作,结果为1,就表示当前整数最低位为1,将整数右移一位后重复前一步骤#include<iostream>using namespace std;int main(){ int n=0; while(cin>>n) { int count=0,i=0; while(n) { if(1==(n&1))

2021-05-15 10:33:20 136

原创 [leetcode]236. 二叉树的最近公共祖先

题目链接:leetcode 236. 二叉树的最近公共祖先题目描述:思路解析:1、查找:递归遍历,查找两个目标结点的路径,并且将路径存放进栈内2、栈的裁剪:将两个栈按照小的栈进行裁剪,变成等长3、查找公共祖先图示:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNod

2021-05-11 15:13:39 103

原创 【C++】二叉搜索树KV模型

不了解二叉搜索树可以阅读我上一篇博客:二叉搜索树KV模型:每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。该种方式在现实生活中非常常见:比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文<word, chinese>就构成一种键值对;再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出现次数就是<word, count>就构成一种键值对。比如:实现一个简单的

2021-05-11 11:49:47 242

原创 【C++】多态:虚函数、重写、抽象类、虚函数表

文章目录概述实现在C++中实现多态需要满足的条件虚函数重写override关键字 final关键字抽象类接口继承和实现继承虚函数表概述多态的概念:通俗讲就是多种形态,具体来说就是当需要完成某个行为时,由不同的对象去完成会产生不同的结果。 比如乘车买票,普通人必须买全票,学生可以买半票。实现在C++中实现多态需要满足的条件1、前提:发生继承2、父类中要有虚函数3、调用虚函数的类型必须是指针或者引用4、虚函数需要在子类中被重写5、一般是通过父类的指针或者引用来调用虚函数 (可以将子类

2021-05-09 11:22:03 520 2

原创 [Linux]线程安全的单例模式

文章目录线程安全的单例模式饿汉方式懒汉方式线程安全的单例模式应用场景:一个类只能实例化一个对象;一份资源只能被加载一次。向外提供一个统一的接口,用于访问。具体实现:饿汉方式 / 懒汉方式举例简单理解饿汉 / 懒汉方式:饿汉方式:吃完饭后立马洗碗,这样下次到饭点就可以直接吃饭(资源提前加载)懒汉方式:吃完饭后不洗碗,放着,到下次吃饭时再洗碗(资源在使用时才加载)​饿汉方式饿汉方式:资源在程序初始化阶段就完成加载—空间换时间注意:饿汉方式的特性决定了它不需要考虑线程安全的问题。1、静态修

2021-05-06 16:55:38 142 1

原创 [Linux]线程池

文章目录线程池:任务类线程池任务队列完整代码:线程池:针对大量的数据请求进行处理的场景创建一堆工作线程(有最大数量限制)和一个线程安全的任务独队列,这些工作线程不断地从任务队列中取出任务进行处理。优点:1、避免资源无限制申请造成资源耗尽2、避免大量的创建和销毁线程带来的时间成本实现:1、直接在线程入口函数中定义好各种不同类型数据的处理方法2、要处理什么数据以及如何处理都由外部传入(函数指针)ThreadTask{数据+处理数据的函数的指针}ThreadPool{有数量上限的线程+线程安

2021-05-05 20:43:02 92

原创 [Linux]信号量实现同步与互斥----生产者消费者模型

概述信号量:就是一个内核中的计数器+pcb等待队列,用来实现进程间的同步与互斥原理:对资源进行计数,在进程获取资源之前先通过计数判断获取是否合理;不合理则阻塞等待,直到条件满足后唤醒阻塞进程同步的实现:获取资源前进行P操作,合理则获取,不合理则阻塞;产生一次资源进行一次V操作互斥的实现:计数最大为1,表示只有一个资源,访问前执行P操作,在访问期间其他进程不可访问,访问完成后执行V操作;P操作:计数-1,判断访问是否合理,不合理则阻塞;合理则正确返回V操作:计数+1,唤醒阻塞进程操作接口头

2021-05-05 16:17:46 439

空空如也

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

TA关注的人

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