自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 括号匹配

class Solution {public: vector<string> generateParenthesis(int n) { vector<string> ans; if(n == 0) return ans; Solve("",n,n,ans); return ans; } void Solve(string cur,int l,int r,vector<st

2021-03-09 14:41:51 75

原创 快排

#include<iostream>#include<vector>using namespace std;void quickSort(vector<int>& nums, int begin, int end){ if (begin < end){ int i = begin, j = end, key = nums[begin]; while (i < j) { while (i < j &&

2021-03-09 14:40:05 106

原创 offer50.第一次只出现一次的字符

class Solution {public: char firstUniqChar(string s) { int count[256] = {0}; for(auto e : s){ count[e]++; } for(int i = 0;i < s.size();++i){ if(count[s[i]] == 1){ retu

2021-03-09 14:38:58 74

原创 合并两个有序链表

#include<iostream>using namespace std;struct list_node { int val; struct list_node* next;};list_node* input_list() { int n, val; list_node* phead = new list_node(); list_node* cur_pnode = phead; cin >> n; for (

2021-03-09 14:37:32 51

原创 反向打印链表

/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { /

2021-03-09 14:36:39 48

原创 lc230.二叉树中搜索第K小的元素

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} *

2021-03-09 14:34:18 69

原创 二叉树遍历

/*问题:二叉树的先、中、后序非递归遍历先序遍历非递归: 1、借助栈,先将根入栈 2、弹出栈顶并打印,然后将其右孩子**入栈(若有的话) 3、然后左孩子**入栈 (若有的话) 4、然后回到2中序遍历非递归: 1、借助栈,将整个树的左边界**一次入栈(root=root->left) 2、若root为空,则弹出栈顶node并打印,另root=node.right,然后重复1 3、直到栈为空或root为空,结束后序遍历(借助两个栈)***: 1、栈s1,初始值为根 2、弹出

2021-03-09 14:32:51 51

原创 lc17.电话号码的字码组合

题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 <= digits.length <

2021-03-09 14:30:49 78

原创 offer22.打印链表的倒数第K个节点

题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kg

2021-03-09 14:27:34 71

原创 插入排序

插入排序:流程:进行遍历,从下标为1的元素开始,对每一个元素进行排序,记录v[i]为cur, pos = i-1;将cur插入到前i个元素中, 插入流程: 将v[pos+1] = v[pos];将v[pos]和cur进行比较. pos–;1)记录当前位置数据2)腾出位置来将当前位置的数据插入#include <iostream>#include <vector>using namespace std;int main(){ int a[] = {4,2,5,

2021-03-09 14:19:52 43

原创 向上取整和向下取整

取整函数对小数点后面数字不为0的树操作给一个整数, 取整就返回整数本身对小数不为0的数操作:比如:1.9调用上取整函数 得到: 2调用下取整函数 得到: 1C++内部是下取整

2021-03-07 14:44:01 1040

原创 内存对齐

背书式:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间 同时按照上面的对齐方式调整位置 空缺的字节自动填充 同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大的空间的类型的字节数)的倍数,所以在为最后一个成员变量申请空间后 还会根据需要自动填充空缺的字节...

2021-03-01 20:02:07 32

原创 通信-----管道

为啥要进行进程之间的通信,因为进程是独立资源分配的单元,但不同的进程之间需要进行信息交互,与状态的传递linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字命名管道:1.如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。2.命名管道是一种特殊类型的文件命名管道与匿名管道之间的唯一区别就是创建与打开的方式不同,...

2021-03-01 20:01:45 57

原创 网络编程中接口转接函数

in_addr_t ,(char* ip);#点分十进制字符串IP地址转换网络字节序整数地址char* inet_ntoa(struct in_addr addr);#网络字节序整数IP地址转换点分十进制字符串地址int inet_pton(int domain,char* ip,viod* ip);#字符串地址转换为网络字节序整数地址int inet_ntop(int domain,void* ip,char* ip,int len);#网络字节序整数IP地址转换点分十进制字符串IP地址...

2021-03-01 19:50:38 89

原创 非阻塞IO

block阻塞:意思是进程或线程执行到某一个函数的时候,一定要等待某一个事件的发生,如果这个事件没有发生就一直等待在这里,函数不能够返回.就可以使用select来实现非阻塞,意思是进程或者线程当执行到函数式不必要等待一个事件的发生,当事件没有发生的时候,函数继续执行,多路转接:监视文件描述符的状态,当文件发生的我感兴趣的改变时select:以事件来操作文件描述符poll:以文件描述符来操作事件epoll:Linux上的特有的方言,对poll进行了分装int select(int Maxfd+1,

2021-03-01 19:49:04 55

原创 OOP多态

###多态的定义(调用虚函数来实现多态)多态(不同的对象完成相同的行为,展现不同的形态)是运行时多态通过虚函数来实现,就是通过定义基类的指针或引用来调用一个虚成员函数是会动态绑定,动态的绑定是指针或引用绑定的具体的对象,在运行是的时候,调用的方法是这个指针或引用所绑定的具体的对象的方法,而不是基类的方法.(通过定义基类的指针或引用来指向不同的对象,在运行的时候调用具体的虚函数的方法是这个基类指针或引用所指向的具体的对象的虚函数,而不是基类虚函数)####注意事项:1.虚函数必须是有定义,因为需要动态绑

2021-03-01 19:47:44 251

原创 http

HTTP协议本篇文章就HTTP(HyperText Transfer Protocol)协议做一些简单的介绍提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录HTTP协议前言一、HTTP基本介绍url(统一资源定位符)HTTP方法状态码1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供

2021-03-01 19:45:18 75

原创 TCP可靠传输

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、重传机制(1)超时重传(2)快速重传(3)SACK(4)D-SACK二、滑动窗口三、流量控制四、拥塞控制前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、重传机制重传机制:TCP实现可靠传输是通过序列号和ACK确认应答来实现的,当报文在网络传输的

2021-03-01 19:44:17 58

原创 标准IO

IO分为:标准IO(stdio)和系统IO(sysio),两者间的区别:类型可移植性实时性吞吐量功能STDIO高低高受限SYSIO低高低自由系统IO是由内核中的函数库提供的.不同的操作系统所提供的IO接口时不同,所以使用系统IO的移植性差.如果想要移植系统IO所实现的程序到目标平台上,就带按照目标平台所提供的系统IO接口对程序进行修改.1.fopen()//打开一个流#include <stdio.h>FILE *fopen(co

2021-03-01 19:43:35 220

原创 IPC

进程状态: 运行, 就绪, 阻塞Linux下进程状态,运行, 可中断休眠状态, 停止, 僵尸僵尸状态: 描述的是一个已经退出了但没有完全释放资源的进程的一种状态,这种进程状态称为僵尸状态产生的原因:子进程先于父进程退出向父进程发送SIGCHLD信号,但是SIGCHLD信号默认的处理方式是忽略处理 ,因此父进程无法直接获知子进程状态进程僵尸状态危害:资源泄漏;解决方案: 避免僵尸进程的产生,在父进程创建子进程之后进行进程等待,等待子进程退出,获取返回值,释放子进程资源程序地址空间: 进程虚拟地址空

2021-03-01 19:43:11 207

原创 多线程

线程概念,线程控制,线程安全,线程池线程概念:线程是进程中的执行流,是CPU调度的基本单元;Linux下的线程是通过pcb来实现的,一个进程中可以有多个线程pcb,这些pcb共享进程的大部分资源(包括:IO信息,程序地址空间,文件描述信息,信号信息)Linux下的pcb相较于传统的pcb更加的轻量化,因此Linux下的线程也被称之为轻量级的进程pcb: 进程控制块(是系统为进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化状态,系统利用pcb来管理和控制进程,所以pcb是操作系统

2021-03-01 19:42:37 76

原创 输入URL在网络中发生的事件

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录一.解析URLIP地址查询-DNS(Domain Name System)协议栈一.解析URL浏览器首先对URL进行解析,浏览器通过对URL进行解析,浏览器确定了服务器名称和文件名通过对URL解析,得到了web服务器和文件名,就可以通过解析出的信息来生成HTTP请求消

2020-10-22 16:01:32 122

原创 socket

/* server.c */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#define MAXLINE 80#define SERV_PORT 8000int main(void){ struct sockadd..

2020-10-17 11:28:09 58

原创 去除重复字符串中的字符

去掉字符串中重复字符#include<iostream>#include<string>using namespace std;int main(){ string s; cin >> s; int len = s.size(); int tmp[500] = { 0,0 }; for (int i = 0; i < len; i++) { tmp[s[i]]++; } int i = 0, j = 0; for (int i

2020-09-15 21:01:50 102

原创 20.有效括号

#include<iostream>#include<string>#include<stack>using namespace std;bool isVaild(string str){ int len = str.size(); stack<char> stacktmp; if (str.size() % 2 == 1) //当给字符串的长度为单数是,这是不满足题意,返回false return false; for (cha.

2020-09-15 20:50:53 79

原创 程序的内存结构

在程序运行前:BSS段(未初始化数据区):用于存放程序中未初始化的全局变量和静态变量,程序结束后由资源有系统自动释放(BSS段并不存放在程序文件中,因为内核在程序运行前将他们设置为0,存放在程序文件中的只有代码段和已初始化数据区)data(已初始化数据区): 用于存放已初始化的全局变量和静态变量.text(代码段)存放代码和只读的常量程序运行时:栈区:栈中存放函数参数和局部变量,由编译器自动释放,每当一个函数被调用时,函数的返回值和调用信息被保存到栈中,然后被调用的函数会在栈上为它的自动变量和临.

2020-09-13 23:19:09 481

原创 已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表, 至少要进行____次探测。

已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行____次探测。插入:第一个元素 探测1次第二个元素 探测2次第三个元素 探测3次。。。。。。第N个元素 探测N次就一共有(N+1)N / 2 次探测...

2020-09-09 17:18:14 679

原创 堆的插入/删除算法

堆的插入:将新的远素插入到数的最后的叶子节点,之后就采用向上调整算法堆的删除:将堆顶元素删除后,之后将二叉树的最后的元素的替换根节点,然后采取向下调整算法。堆的表示,层序遍历。...

2020-09-09 17:07:51 514

原创 容器适配器

标准库中提供了三种容器适配器:queue priority_queue stack容器适配是借助已有的容器来实现一种抽象类型不同的数据结构

2020-09-01 10:36:43 57

原创 深浅拷贝

浅拷贝就是对资源的的引用或指针进行单纯的赋值深拷贝就是另外开辟空间将原来空间的资源拷贝到新空间中class A { public: A(int _size) : size(_size) { data = new int[size]; } // 假如其中有一段动态分配的内存 A(){}; ~A() { delete [] data; } // 析构时释放资源 private: int* data; int size; }int main() { A a(

2020-09-01 09:01:39 74

原创 虚表

对象没有虚函数表,对象只有一个虚函数的指针vptr,指向在存在代码段的虚表.在单继承的子类中,子类只维护一张虚表总结:vtable是属于类的,存在代码段中,含有虚函数的对象中有vptr指向vtable

2020-08-16 00:37:14 142

原创 inline函数

inline函数的目的是为了提高程序执行的效率,inline函数的使用方法是将inline放在函数的定义处,而不是声明处./*错误inline int fun(int x,int y);int fun (int x,int y) { ... }*/int fun (int x,int y);inline int fun (int x,int y) {...}程序在执行到inline函数的时候,会直接将inline函数展开,这样将节省了函数掉的将要保存的代码执行时保存断点和执行完函数后恢复调用

2020-08-10 12:13:10 495

原创 施工分布图

2020-06-10 23:42:57 140

原创 数据库(壹)

表的创建:creat table XXX (1,2) engine,charset;表的修改:alter table tbl_name add/modify/dropalter table tbl_name rename new_name;表的查询:show tables;desc tbl_name;表的删除:drop table tbl_name;创建table:进入到某一个database中(use dbname)创建table(例如:create table user1(id int,

2020-05-26 19:25:56 125

原创 HTTP协议

http超文本传输协议 URL==网址https://blog.csdn.net/haoel/article/details/2886

2020-03-29 14:11:50 57

原创 socket编程

socket编程接口:1 创建套接字:int socket(int domain,int type,int protocol)(地址域,套接字类型,协议类型)2 绑定地址信息:int bind(int sockfd,int sockaddr* addr,socklen_t len)(描述符,地址信息结构,地址信息长度)3 字节序的转换:uint32_t htonl(uint32_t)将四字...

2020-03-28 22:08:13 185

原创 用两个栈实现一个队列

思想:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。如果stack2为空时,我们把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压倒stack1的栈底,经过弹出和压入之后就处于stack2的栈顶,有可以直接弹出。如果有新元素d插入,我们直接把它压入stack1即可。class Solution{public: void ...

2019-10-29 00:22:45 74

原创 进度条函数

#include <stdio.h>#include <windows.h>int main(){ char arr[51] = { 0 }; const char* lp = "|/-\\"; for (int i = 0; i < 50; i++) { arr[i] = '#'; // /r printf("[%-50s][%d%...

2019-10-25 23:09:30 400

原创 最小栈的实现

最小栈的实现:定义两个栈,一个数据栈,一个最小栈;如果最小栈为空就直接把number压人栈中最小栈不为空,就把number与最小栈的栈顶元素进行比较,如果小于最小栈的栈顶元素,就把number压入最小栈,否则就把number压入datastack中,最后返回最小栈的栈顶元素就是最小值#include<iostream>#include<stack>using ...

2019-10-24 12:26:25 125

原创 斐波那契:

2019-10-24 10:36:21 141

3无重复字符的最长子串.md

一些算法题而已

2021-03-09

空空如也

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

TA关注的人

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