自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 收藏
  • 关注

原创 2021-10-21

ScrolView定位到某一个组件

2022-01-11 20:01:25 242

原创 C++回文子串

回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串(回文串是一个正读和反读都一样的字符串)。具有不同开始位置或结束位置的回文串,即使是由相同的字符组成,也会被计为是不同的子串。输入:仅包含一个字符串,长度不会超过 1000。输出:仅包含一个非负整数, 代表输入字符串有多少个回文子串。示例:输入:abc输出:3输入:aaa输出:6#include<iostream>#include<string>#include<vector>us

2020-11-25 22:15:21 1638

原创 LRU Cache的数据结构选择以及实现

LRULRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内

2020-10-23 15:45:01 621 1

原创 C++两字符串的最长公共子序列的个数及打印出最长公共子序列

输入两字符串,输出最长的公共子序列长度。采用动态规划思想。假设字符串a长度为n,字符串b的长度为m,使用一个二维数组arr[n+1][m+1]来记录每种情况下最长公共子序列的长度。初始状态:字符串a空元素,字符串b空元素。这样的情况就填0.也就是二维数组首行首列全为0.假设:a{a,b,c,d}b{b,c,a,d}行 i 是字符串a的元素,列 j 是字符串b的元素状态转换方程:如果这个二维数组中的i行字符等于j列中字符的情况,那么arr[i][j]就等于它的左上角arr[i - 1][j

2020-10-15 01:01:50 1701

原创 图的基本知识总结

图基本概念顶点和边有向图和无向图完全图邻接顶点顶点的度路径路径长度简单路径与回路子图连通图强连通图生成树图的存储结构邻接矩阵优缺点实现邻接表基本概念图是由顶点集合及顶点间的关系组成的一种数据结构:G = (V, E),其中:顶点集合V = {x|x属于某个数据对象集}是有穷非空集合;E = {(x,y)|x,y属于V}或者E = {<x, y>|x,y属于V && Path(x, y)}是顶点间关系的有穷集合,也叫做边的集合。(x, y)表示x到y的一条双向通路,即(x

2020-10-05 23:45:31 642

原创 并查集的详细解释与应用场景

并查集并查集原理概念示例并查集实现并查集应用并查集原理概念在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-findset)。示例比如大学刚开学,一个班有10个新同学,起初他们互相不认识。假设10个同学编号1-10。用数组的编号代表这些同学,同时数组内初始全为-1(置为-1的原理后边解释)。

2020-09-17 23:16:31 2338

原创 Linux进程知识总结

进程什么是进程描述进程-PCB什么是PCBtask_ struct内容分类组织进程进程状态僵尸进程危害孤儿进程进程优先级查看系统进程用top命令更改已存在进程的nice并行 & 并发虚拟地址fork函数写时拷贝fork调用失败的原因进程等待进程等待必要性进程等待的方法进程程序替换替换原理什么是进程课本概念:程序的一个执行实例,正在执行的程序等。内核观点:担当分配系统资源(CPU时间,内存)的实体 。描述进程-PCB什么是PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属

2020-09-14 17:38:09 119

原创 C++电话号码的组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。例如:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].static string str[] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };class Solution {public: void

2020-09-13 00:36:41 781

原创 C++: set和map知识点总结

set和mapsetmultisetmapoperator[]和at()multimapset与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对。set中插入元素时,只需要插入value即可,不需要构造键值对。set中的元素不可以重复(因此可以使用set进行去重)。使用set的迭代器遍历set中的元素,可以得到有序序列set中的元素

2020-09-09 17:19:21 163

原创 C++继承,多态复习

这里写目录标题一级目录一级目录

2020-09-08 17:37:23 121

原创 C++stringstream的简单介绍以及使用

在C语言中,如果想要将一个整形变量的数据转化为字符串格式可以使用以下两种方式:1.itoa()函数。2sprint()函数。但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。int main(){int n = 123456789;char s1[32];_itoa(n, s1, 10);char s2[32];sprintf(s2, "%d", n);char s3[32];sprintf

2020-09-06 21:19:53 4515

原创 C++容器,容器适配器复习

容器,容器适配器复习深浅拷贝capacityvector 迭代器失效问题vector迭代器失效解决办法vector不用memcpy拷贝的原因list的迭代器失效什么是适配器容器适配器stack 的底层使用什么实现queue的底层用什么实现priority_queue 队列deque (双端队列)为什么选择deque作为stack和queue的底层默认容器什么是分离编译函数模板的优缺点深浅拷贝浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个

2020-09-06 21:11:38 135

原创 C++基础复习

C++基础复习函数重载:引用引用跟指针的区别宏的优缺点auto细则nullptr指针C++中struct和class的区别this指针的特性this指针存在哪里?this指针可以为空吗类的6大默认成员函数默认构造函数初始化列表注意初始化顺序静态成员特性静态成员函数可以调用非静态成员函数吗友元函数友元类内部类C++内存分布new/delete与malloc/free的区别什么是内存泄漏,内存泄漏的危害内存泄漏分类如何避免内存泄漏模板函数匹配规则函数重载:必要条件:1.同名函数。2.参数列表不同(参数类型,

2020-09-05 21:57:11 744

原创 自制网络工具集合(抓包,扫描主机,扫描端口,获取本机信息,dos攻击)

网络工具集1.shark抓包工具(1).数据包格式(2).系统协议的类型(3).原始套接字1.shark抓包工具(1).数据包格式(2).系统协议的类型(3).原始套接字抓包工具获取链路层的数据包,手动层层解析,对链路层,网络层,传输层的报头格式有更加深入的理解。首先从网络层抓取的包都是这个样子的...

2020-09-03 17:54:37 643

原创 在线面试预约系统

在线面试预约系统一个可以提供注册登录,预约面试,记录成绩的面试系统。技术点http协议,tcp协议,cpp-httplib,线程互斥,C++11特性,jQuery+ajax,数据库操作项目模块数据库模块一共有俩数据表,一个是reg_userinfo,这个表负责存放用户的登录邮箱和密码,同时还会有一个自增长的列id。另一个是stu_info,存放用户的其他信息,学校啊,年级,电话等等。同时还可以存放用户的笔试详细成绩,预约的面试时间,面试结果等信息。工具模块调用boost库里的split函数

2020-08-26 23:46:56 1272

原创 C++顺时针打印矩阵

顺时针打印矩阵#include<iostream>#include<vector>using namespace std;//顺时针打印一个矩阵class Printer {public: vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m) { // 思路是先接收外边一圈的数据,再接收收缩一圈的数据,然后依次缩小矩阵 //这四个最外边的边框

2020-08-23 00:42:05 624

原创 C++求最大公约数,最小公倍数(简单几行)

//最大公约数int GCD(int x, int y){ int r = x % y; while (r) { x = y; y = r; r = x % y; } return y;} //最小公倍数:最小公倍数=两数之积除以最大公约数int LCM(int a, int b) { return a * b / GCD(a, b);}

2020-08-09 22:06:04 312

原创 C++收件人列表

链接:收件人列表NowCoder要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。#include<iostream>#include<string>using namespace std;//收件人列表//输入的是一个二维字符串数组//动态规划的思想,我们把这些拼到一个长的字符串后边,然后按格式输出i

2020-08-07 18:28:37 282

原创 Linux--UDP通信简单程序

服务器程序:使用recvfrom函数阻塞接收信息。并将信息用sendto函数发回去客户端程序:使用sendto函数,发送数据给客户端。然后使用recvfrom函数接收服务器发回的消息。服务器程序#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys.

2020-08-06 21:33:50 222

原创 C++SGI-STL空间配置器原理

STL空间配置器为各个容器高效的管理空间(空间的申请与回收)的。为什么需要空间配置器?1.在使用new申请空间时,空间申请与释放需要用户自己管理,容易造成内存泄漏2.频繁向系统申请小块内存块,容易造成内存碎片3.频繁向系统申请小块内存,影响程序运行效率4.直接使用malloc与new进行申请,每块空间前有额外空间浪费5.申请空间失败怎么应对6.代码结构比较混乱,代码复用率不高7.未考虑线程安全问题STL空间配置器的原理:空间配置器以128作为小块内存与大块内存的分界线,将空间配置器

2020-08-05 23:47:18 285

原创 C++斐波那契凤尾,不超时

斐波那契凤尾NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。注意:这个题如果直接写一个常规的斐波那契的函数,每次查找都需要调用那个函数,如果频繁使用大数字去测试,很容易超时,所以我们需要提前把斐波那契数列准备好。这样每次查找就变成了访问数组第n个元素,顺序表每次取[n]的效率是O(1),所以只有第一次构造数列的时候花费时间,后边就

2020-08-05 11:44:45 402

原创 C++求一个整数的所有素因子,不会超时

输入一个整数,输出它的所有素因子例如:15 = 3 * 518 = 2 * 3 * 3#include<iostream>#include<vector>#include<cmath>//打印出一个整数的所有素因子,不会超时using namespace std;void func(int n, vector<int> arr) { int k = (int)sqrt(n); int m = n; int i; for (i = 2

2020-08-04 16:33:54 1586

原创 C++美国节日

链接:美国节日和中国的节日不同,美国的节假日通常是选择某个月的第几个星期几这种形式,因此每一年的放假日期都不相同。具体规则如下:1月1日:元旦1月的第三个星期一:马丁·路德·金纪念日2月的第三个星期一:总统节5月的最后一个星期一:阵亡将士纪念日7月4日:美国国庆9月的第一个星期一:劳动节11月的第四个星期四:感恩节12月25日:圣诞节现在给出一个年份,请你帮忙生成当年节日的日期。#include<iostream>#include&lt

2020-08-04 16:31:47 353

原创 C++求一个整数的所有素因子的个数,不会超时

一个正整数可以分解成一个或多个数的积。例如36=223*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。#include<iostream>using namespace std;int main() { int n = 0; while (cin >> n) { int sum = 0; int k = (int)sqrt(n); for (int i = 2; i

2020-08-01 21:15:59 1968

原创 C++不用加减乘除实现两个整数的加法

不用加减乘除实现加法方式一: 二进制运算int Add(int num1, int num2){ int a = num1, b; while (a != 0) { a = (num1 & num2) << 1; b = num1 ^ num2; num1 = a; num2 = b; } return num2;}方式二: 利用一些容器int Add2(int num1, int num2){ string s1(num1, 'a'); str

2020-07-29 15:29:02 527

原创 C++类型转换

类型转换1.static_cast用于非多态类型的转换(静态转换) ,编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换 。char c = '1';int m = static_cast<int>(c);2.reinterpret_cast将一种类型转换为另一种不同的类型 ,支持强制类型转换int a = 10;int* ptr3 = reinterpret_cast<int*> (a);3.const_cast最

2020-07-28 14:19:15 76

原创 C++单例模式(只能创建一个对象的类)

单例模式一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。方式一(饿汉模式)不管你将来用不用,程序启动时就创建一个唯一的实例对象构造函数私有提供一个静态的方法返回单例声明一个静态的单例成员拷贝构造和赋值声明为delete函

2020-07-28 14:04:19 3027

原创 C++不能被拷贝的类

不能被拷贝的类很简单,屏蔽掉 拷贝构造函数 和 赋值运算符,或者声明为私有不实现。class NoCopy{public: NoCopy(){};private: /*NoCopy(const NoCopy& nc); NoCopy& operator=(const NoCopy& nc);*/ NoCopy(const NoCopy& nc) = delete; NoCopy& operator=(const NoCopy& nc) =

2020-07-28 13:53:46 597

原创 C++设计一个不能被继承的类

不能被继承的类方式一:final关键字,这个关键字就是防止这个类被继承class A final{};方式二:父类构造函数私有化,这样子类继承时无法构造父类,就无法继承。class A{private: A(){};};

2020-07-28 13:51:43 211

原创 C++设计一个只能在栈上创建对象的类

只能在栈上创建对象的类方式一:构造函数私有提供一个公有的静态的栈上创建对象的方法class StackOnly{public: static StackOnly getInstance() { return StackOnly(); }private: StackOnly(){};};void creatStackOnly(){ StackOnly so = StackOnly::getInstance();}方式二:把operator new函数声明为dele

2020-07-28 13:48:25 126

原创 C++设计一个只能在堆上创建对象的类

只能在堆上创建对象的类构造函数私有提供一个静态的堆上创建对象的方法防拷贝(拷贝构造声明为私有,且不实现, 或者声明为delete函数)class HeapOnly{public: static HeapOnly* getInstance() { //堆上创建对象 return new HeapOnly; }private: HeapOnly() {} //HeapOnly(const HeapOnly& ho);//c98声明不实现 HeapOnly(cons

2020-07-28 13:37:41 140

原创 C++智能指针知识总结

智能指针智能指针是为了避免内存泄漏的技术。智能指针采用了RAII特性,利用对象生命周期来控制程序资源 ,在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。 这么做有两大好处:1.不需要显式地释放资源2.采用这种方式,对象所需的资源在其生命期内始终保持有效 。C++的智能指针都在下边这个头文件中#include <memory> 智能指针类模拟实现:template&l

2020-07-27 18:27:34 796

原创 C++智能指针shared_ptr的实现

shared_ptr的实现智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时++或–,这个操作不是原子的,引用计数原来是1,++了两次,可能只实际只有一个加生效了,引用计数是2,这样引用计数就错乱了。会导致资源未释放或者程序崩溃的问题。所以只能指针中引用计数++、–是需要加锁的,也就是说引用计数的操作是线程安全的 。#include <thread> #include <mutex> template <class T>class

2020-07-27 18:10:49 876

原创 C++星际密码

星际密码链接:星际密码星际战争开展了100年之后,NowCoder终于破译了外星人的密码!他们的密码是一串整数,通过一张表里的信息映射成最终4位密码。表的规则是:n对应的值是矩阵X的n次方的左上角,如果这个数不足4位则用0填充,如果大于4位的则只输出最后4位。|1 1|^n => |Xn …||1 0| |… …|例如n=2时,|1 1|^2 => |1 1| * |1 1| => |2 1||1 0| |1 0| |1 0| |1 1|即2对

2020-07-27 16:36:36 605 1

原创 C++数根

数根链接:数根数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。现在给你一个正整数,输出它的数根。#include<iostr

2020-07-27 16:34:46 3316

原创 C++小易的升级之路

小易的升级之路#include<iostream>#include<vector>//小易的升级之路using namespace std;int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b);}int func(int n, int a, vector<int> arr) { int i = 0; while (i < arr.size())

2020-07-24 18:51:59 116

原创 C++找到字符串中第一个只出现一次的字符

找到字符串中第一个只出现一次的字符#include<iostream>#include<string>using namespace std;//找到字符串中第一个只出现一次的字符class Solution {public: int firstUniqChar(string s) { // 统计每个字符出现的次数 int count[256] = { 0 }; int size = s.size(); for (int i = 0; i < si

2020-07-24 18:50:18 2099

原创 C++MP3光标位置

MP3光标位置MP3光标位置用含有四个元素的数组代表屏幕,一个指针代表光标位置#include<iostream>#include<string>#include<vector>using namespace std;//up函数vector<int> U1(vector<int> a, int* p, int n, int size) { int i; //小于等于四首歌的情况,不存在翻页,就只是光标位置移动 if (n &

2020-07-23 22:35:10 163

原创 C++11零碎知识总节

列表初始化内置类型的列表初始化int a{1};int b = {2};//容器的列表初始化vector<int> arr{1, 2, 3, 4, 5}; //动态数组也可以int* arr3 = new int[5]{1,2,3,4,5}; map<int, int> m{{1,1}, {2,2,},{3,3},{4,4}}; 自定义类型也可以列表初始化class Point{public: Point(int x = 0, int y = 0):

2020-07-23 17:12:47 77

原创 C++洗牌

洗牌链接:洗牌来源:牛客网洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两

2020-07-22 22:45:47 621

空空如也

空空如也

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

TA关注的人

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