自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于虚函数

发现类中有虚函数时,就构建一个虚表,虚表中存放着函数的入口地址。构建对象时,对象前四个字节保存着虚表指针,如果父类中有函数被重写,虚表指针指向子类的虚表,没有则指向父类的虚表。...

2021-11-17 17:59:32 180

原创 关于同步 异步

按我的理解同步是俩个事物之间存在一定的联系,例当a线程申请使用b正在使用的资源时,需要等待b用完。而异步则可以直接申请访问。就好比红绿灯的情况下,丛向的车等横向车走完再走,这就是同步。异步的话就是横纵向车想怎么走怎么走,双方互相不知道。所以,同步会更加安全。...

2021-10-26 19:24:09 188

原创 把数字翻译成字符串出现的可能性

1.滚动数组优化动态规划首先需要谈论到滚动数组:以斐波那契数列为例:一般写法为:int fib(int n){ Fib[0] = 0; Fib[1] = 1; Fib[2] = 1; for(int i = 3; i <= n; ++i) Fib[i] = Fib[i - 1] + Fib[i - 2]; return Fib[n];}用滚动数组优化之后:int fib(int n){ Fib[1] = 0; Fib[2] = 1; for(int i =

2021-10-21 21:14:21 167

原创 虚拟地址和重定位

1.关于虚拟地址和重定位的一些理解:虚拟地址:当我们需要运行一些比较大的程序是,会占用到较大的内存,这时便用到了虚拟内存。所谓虚拟内存,实则是通过将磁盘上的存储空间的地址映射到内存中,当用所需要的资源时,会出现缺页异常,然后就会去磁盘上寻找这块资源。重定位(将逻辑地址变换成内存中实际物理地址的过程):关于重定位,首先要了解运行地址和链接地址,当出现链接地址和运行地址不一致的情况,我们就要重定位,具体是执行一个位置无关码,它会将原来的的那份代码拷贝到链接地址中,这样就可以通过链接地址去找到这块内存

2021-10-19 14:59:46 797

原创 二叉树和为某一值的路径

class Solution{public: vector<vector<int>> findpath(ListNode* root, int target) { vector<int> temp; vector<vector<int>> res; if (!root) { return res; } dfs(root, target, temp, res); return res; } void df

2021-10-12 20:44:33 103

原创 反转单链表

递归:vector<int> reversePrint(ListNode* head) { vector<int> vec; if (head == nullptr) { return {}; } vec = reversePrint(head->next);//没有vec = 的话会返回0; vec.push_back(head->val);//注释掉这句会返回空 return vec; }...

2021-10-02 19:36:25 103

原创 创建服务器的流程

TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP通信需要经过创建连接、数据传输、终止连接三个步骤。​ 所以创建tcp服务器的流程有如下几步:1、创建一个socket套接字 2、绑定服务器的IP 和端口port 3、开启监听listen 将服务器的主动连接变成被动连接 4、等待客服端的请求连接 5、接收客服端的数据请求,向客服端发送数据...

2021-09-28 21:26:37 1393

原创 关于三种继承

public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。...

2021-09-28 20:45:02 124

原创 单例模式(懒汉及饿汉)

懒汉式(时间换空间)class singleton //实现单例模式的类 { private: singleton(){} //私有的构造函数 static singleton* Instance; public: static singleton* GetInstance() { if (Instance == NULL) //判断是否第一调用 Insta

2021-09-25 22:00:22 104

原创 关于static

static修饰局部变量:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置(从原来的栈中存放改为静态存储区)及其生命周期(局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问),但未改变其作用域。修饰全局变量:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。修饰类中的成员变量:  用static修饰类的数据成员实际使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象。因此,stati

2021-09-25 21:56:35 114

原创 带头结点的单链表逆制

void ReverseList(ListNode* head){ ListNode* cur = head->next; head->next = nullptr; while(cur!=nullptr) { ListNode* temp = cur->next; cur->next = head->next; head->next = cur; cur = temp; } }

2021-09-25 11:36:54 158

原创 关于项目遇到问题的一些整理

1.关于typedef的一些整理1)最简单的就是例:typedef int INT;这时的INT a = 0;和int a = 0;是一样的。2)关于数组的:typedef int ARRAY[10]ARRAY ai等价于int ai[10].3)关于回调函数void fun(int a){}void fun2(int a){}void (*p)(int a);在handle中要想用fun写起来会很麻烦void handle(void (*p)(int a)){}所以:

2021-09-18 22:49:09 115

原创 关于树的一些总结

二叉树的前驱结点和后继结点前驱节点:对一棵二叉树进行中序遍历,遍历后的顺序,当前节点的前一个节点为该节点的前驱节点;后继节点:对一棵二叉树进行中序遍历,遍历后的顺序,当前节点的后一个节点为该节点的后继节点;例如一颗完全二叉树(1,2,3,4,5,6,7),按照中序遍历后的顺序为:(4,2,5,1,6,3,7),1节点的前驱节点为:5,后继节点为6.1.二叉搜索树struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeN

2021-09-15 21:57:48 123

原创 二叉搜索树

#include<iostream>#include<vector>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x) :val(x), left(nullptr), right(nullptr) {}};class SearchTree{private: int _a;public: void sum(int a)

2021-09-14 21:59:37 107

原创 六大排序算法

1.插入排序假设前n-1个元素是有序的,将第n个和第n-1个比较,n<n-1的话,交换位置,继续比较因为不知道有多少个有序的,一般从第一个元素开始。void InsertOrder(int arr[],int n){ for(int i =0;i<n-1;++i) { int last = i;//有序数列最后一位 insert = arr[last+1]; while(last>=0) { if(insert<arr[last]) {

2021-09-13 17:22:36 191

原创 常用算法:分治,动态规划,贪心,回溯

1.分治算法主要思想是将一个难以直接解决的大问题,分割成规模较小的相同问题,以便逐个击破,分而治之。2.动态规划基本思想与分治法类似,将待求解问题分解为若干个子问题(阶段),按顺序求出子阶段,前一问题的解为后一问题提供有用的信息。与分治法不同的是,动态规划下一子问的题的求解是建立在迁移自问题的基础之上,而分治法的各个子问题是相互独立的。3.贪心算法在对问题求解时,总是做出当下来看最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上考虑的局部最优解。(背包问题)4.回溯法回溯

2021-09-09 09:38:18 551

原创 复杂链表的复制

大概就是在每个原节点后复制一个新的节点,复制好之后再将链表拆为两个代码如下:struct ComplexListNode{ int val; ComplexListNode* next; ComplexListNode* random; ComplexListNode(int x):val(x),next(nullptr),random(nullptr){}};class solution{public: ComplexListNode* clone(ComplexListNode

2021-09-08 18:30:42 102

原创 关于单链表的复制

struct LinkList{}LinkList* Tail_Create_LinkList(){ LinkList H; H = new LinkList(); if(!H) { cout<<"申请空间失败"; return 0; } H->next = nullptr; cout<<"输入单链表元素(负数结束):" LinkLIst* p,r; p = r = new LinkList(); cin>>p->da

2021-09-07 14:16:23 1277

原创 查找和排序

总结一下常见的查找和排序:1)查找算法1.顺序查找int SequenceSearch(int a[],int value,int n){ for(int i = 0;i<n,i++) { if(value==a[i]} { return i; } } return -1;}2.二分查找(元素需要是排序后的)int BinarySearch(int a[],int value,int n){ int low,high,mid; low = 0; hig

2021-09-07 14:09:26 223

原创 剑指offer

反转链表leetcode中的反转链表:1)递归法`class solution{private:vector<int> vec;public:vector<int> reversePrint(listNode* head){if(head==nullptr||head->next==nullptr)//无节点或只有一个节点{ return; }//两个节点以上if(nullptr!=head->next) { reversePrint(

2021-09-06 21:16:36 106

原创 折半查找

代码如下:#include<stdio.h>int Binsearch(int arr[],int len int,key){ int low = 0; int high = len-1; int mid; while(low<=high) { mid = (low+high)/2; if(arr[mid]==key) { return mid; }...

2019-11-14 19:57:37 156

转载 C语言中的malloc,realloc,calloc的使用

动态内存的定义以及内存的申请动态内存:根据变量定义数组的长度,堆内存区域,申请大内存,最大连续内存1.2G申请内存:malloc:( 使用的最多)使用格式:calloc:(申请内存后,并把每个单元格设为0)使用格式:如果用malloc来代替,如下:int *arr = (int )malloc(nsizeof(int));for(int i=0;i<n;i++){ar...

2019-11-14 19:24:30 156

转载 n进制下计算求n的值

n进制下计算求n的值例1:在n进制下,15×4=112,求n。A.5 B.6 C.7 D.8解:方法一:把每一项都转换成十进制,然后进行计算。(1 × n + 5) × 4 = n² + n + 2经计算求得:n = 6,则选择B。方法二:先转换成十进制化简后,等号两侧%n。原式:(1 × n + 5) × 4 = n² + n + 2化简:4n + 20 = n² + n + ...

2019-11-14 19:19:55 916

原创 数组反转

数组反转:数组的反转,最主要的的点有两个,一是计算数组中数字的个数这里最常用的是sizeof(arr)/sizeof(arr【0】);第二点便是清晰的把握数组概念,理清数组下标与其所对应的位置。如:| 1 2 3 4 5 6 7|对应|a[0] a[1] a[2] a[3] a[4] a[5] a[6] |#include<stdio.h>void Reverse(int...

2019-11-14 19:15:49 187

原创 给出一个不多于五位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出每一位数字,例如:原数321,应输出123

给出一个不多于五位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出每一位数字,例如:原数321,应输出123.大家先来看第一个问题,求出数字是几位数。这里要用到的很常用的一个办法就是用这个数字对10求余,例如:321%10=1;由此可以得出各位数字,然后输出。接着,我们将得出的个位数字去掉,这里要用10整除这个数字,321/10=32;再用求余方法便可得到十位数,以此类...

2019-10-17 19:46:20 3156

空空如也

空空如也

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

TA关注的人

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