自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Trie树总结

文章目录前言一、Trie树/字典树/前缀树二、代码1.Trie树节点字符节点数字节点其它插入和查询操作1.插入操作2.查询操作3.一般题目不会考察的这么简单,一般会在查询上做做变形。总结前言 前缀树,字典树,Trie树都是指同一个数据结构。提示:以下是本篇文章正文内容,下面案例可供参考一、Trie树/字典树/前缀树 是一棵 N 叉树。前缀树用于存储、查找字符串。前缀树的每一个结点代表一个字符串的前缀。每一个结点会有多个子结点,通往不同子结点的路径上有着不同的字符。子结点代表的字符串是由结点本

2021-11-01 14:33:52 134

原创 蓄水池采样

蓄水池采样前言一、蓄水池抽样算法原理二、题目练习1.链表随机节点3822.随机数索引(398)总结前言给定一个数据流,数据流长度NNN非常大,且NNN直到处理完所有数据之前都不可知,要求遍历一遍就可以找到目标值。一、蓄水池抽样算法原理原理:蓄水池抽样是一系列的随机算法,其目的在于从包含 nnn个项目的集合 SSS 中选取 kkk 个样本,其中 nnn 为一很大或未知的数量,尤其适用于不能把所有 nnn 个项目都存放到内存的情况。二、题目练习1.链表随机节点382给定一个单链表,随机选择链

2021-10-18 15:19:06 188

原创 基数排序总结

计数排序前言一、计数排序优点二、题目练习leetcode912. 排序数组总结 前言计数排序是一个非基于比较的排序算法,优势在于在对一定范围内的整数排序时,它的复杂度为O(n+k)Ο(n+k)O(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n∗log(n))O(k)>O(n*log(n))O(k)>O(n∗log(n))的时候其效率反而不如基于比较的排序 一、计数排序优点 1.非比较。2.排序范围较小,并

2021-10-17 12:56:55 222

原创 算法中栈用法总结

栈前言: 从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表,因此,可称为限定性的数据结构。限定它仅在表尾进行插入或删除操作。表尾称为栈顶,相应地,表头称为栈底。栈的基本操作除了在栈顶进行插入和删除外,还有栈的初始化,判空以及取栈顶元素等。栈是支持递归的重要的数据结构,很多程序都需要这个看起来简单,但是也发挥着巨大作用的数据结构。文章目录栈前言一、解题方法二、题目练习1.移掉 K 位数字(Leetcode402-medium)贪心和动态规划比较总结

2021-10-13 00:29:07 226

原创 滑动窗口总结

前言滑动窗口指的是这样一类问题的求解方法,在数组上通过双指针同向移动而解决的一类问题。其实这样的问题我们可以不必为它们专门命名一个名字,它们的解法其实是很自然的。本质:使用滑动窗口解决的问题通常是暴力解法的优化,掌握这一类问题最好的办法就是练习,然后思考清楚为什么可以使用滑动窗口。滑动窗口前言一、解题方法二、题目练习1.替换后的最长重复字符(leetcode424题)2.找到字符串中所有字母异位词一、解题方法 滑动窗口基于暴力算法1、如何暴力?2、如何证明滑动窗口的单调性?3、窗口中需要

2021-10-09 18:42:23 113

原创 C++ bitset总结

数据结构bitset术语:某1位置位是置1,某一位复位是某一位清零。文章目录数据结构bitset一、3种初始化方式二、位访问三、位操作四、 位集操作总结实战练习一、3种初始化方式bitset<32> tmp; //默认构造函数,默认全0。bitset<32> tmp(-1); //从整形数构造bitset<32> tmp("101"); //从包含1和0的字符串构造二、位访问bitset<32> tmp(256)

2021-10-08 23:01:44 468

原创 Linux进程间的关系

Linux进程间的关系Linux下每个进程都隶属于一个进程组,每个进程都包含PID、PGID、SID。文章目录Linux进程间的关系前言一、进程组二、会话三、ps命令查看进程间的关系四、系统资源限制五、改变工作目录和根目录六、服务器程序后台化前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、进程组#include <

2021-10-07 15:59:01 276

原创 Leetcode373猜数字大小2

问题描述:我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。示例 :n = 10, 我选择了8.第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。第三轮: 你猜是9,我告诉你,我的数字

2021-10-06 20:10:18 330

原创 Linux用户信息

文章目录一、UID、EUID、GID、EGID二、代码清单三、切换用户总结用户信息对于服务器程序的安全性来说是很重要,比如大部分服务器就必须以root身份启动,但不能以root身份运行。一、UID、EUID、GID、EGID下面这一组函数可以获取和设置当前进程的真实用户ID(UID)、有效用户ID(EUID)、真实组ID(GID)和有效组ID(EGID):#include <sys/types.h>#include <unistd.h>uid_t getuid();

2021-10-06 17:32:11 218

原创 Linux日志系统

工欲善其事,必先利其器。文章目录前言一、日志系统体系结构二、日志相关函数前言服务器的调试和维护都需要一个专业的日志系统一、日志系统体系结构 linux提供一个守护进程处理系统日志-syslogd,现在使用的基本都是rsyslogd。 rsyslogd守护进程既能接收用户输出日志,也能接收内核日志。 用户进程通过syslog系统调用生成系统日志,该日志输出到一个UNIX本地域socket类型的文件/dev/log中,rsyslog则监听该文件以获取用户进程的输出。系统上是通过另外一个守.

2021-10-06 13:25:16 320

原创 Linux服务器编程规范

文章目录Linux服务器编程规范Linux服务器编程规范提示:除了网络通信外,服务器编程还需要考虑一些细节问题,这些问题涉及广而且零碎,基本是模板式的称之为服务器编程规范。 1. Linux服务器程序一般以后台进程形式运行。后台进程又称守护进程。它没有控制终端,因而也不会意外接收到用户输入。守护进程的父进程通常是init进程(PID 为1的进程)。 2. Linux服务器程序通常有一套日志系统,它至少能输出日志到文件,有的高级服务器还能输出日志到专门的UDP服务器。大部分后台进程都在/var

2021-10-06 10:33:49 120

原创 Leetcode371题两数之和

给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5提示:-1000 <= a, b <= 1000解题代码:class Solution {public: int getSum(int a, int b) { if (!a) return b; // a+b=a^b, (a&b)<<1为零

2021-10-05 22:29:16 68

原创 Leetcode372-超级次方

你的任务是计算 aba^bab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入:a = 2, b = [3]输出:8示例 2:输入:a = 2, b = [1,0]输出:1024示例 3:输入:a = 1, b = [4,3,3,8,5,2]输出:1示例 4:输入:a = 2147483647, b = [2,0,0]输出:1198解题代码class Solution {public: const int p =

2021-10-05 22:18:10 83

原创 高级I/O函数

创建文件描述符的函数pipe函数#include <unistd.h>int pipe(int pipefd[2]);成功:返回0失败:返回-1,并设置errno。功能:pipe创建两个文件描述符pipefd[0],pipefd[1]。pipefd[0]负责读管道,pipifd[1]负责写管道。默认情况下是这一对文件描述符是阻塞的。用read系统调用读取空管道,read将会被阻塞,直到有数据写入。用write系统调用写满的管道,write将会被阻塞,直到有数据读出。将文件

2021-10-05 13:36:40 72

转载 数据范围反推算法复杂度和算法

一般笔试题的时间限制是1秒或2秒,在这种情况下,C++代码中的操作次数控制在 107∼10810^7∼10^8107∼108 为最佳,在此基础上可以推出题目要考查的算法。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:n<=30n <= 30n<=30可以推出题目的最佳时间复杂度为指数级别,反推考察的算法有::: dfs+dfs+dfs+剪枝或状态压缩dpdpdp。n<=100n <= 100n<=100可以推出题目的最佳时间复杂度为O(n3)

2021-10-04 21:47:07 255

原创 排序算法-快排

快速排序快排是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序,快排的思想是基于分治。算法流程:选取分分界值。左边将大于等于分界值的数据移动到数组右边,右边将小于等于分界值的数据移动到左边。在左边区域内选取一个分界值并在该区域内重复1、2操作,在右边区域内选取一个分界值重复1、2操作操作。重复上面过程,直到各个区域无法分解。代码实战:题目:给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。数据范围:1

2021-10-04 20:57:19 81

原创 网络信息相关函数

gethostbyname和gethostbyaddrgethostbyname根据主机名称获取主机的完整信息,gethostbyaddr根据IP地址获取主机的完整信息。gethostname通常先在本地/etc/hosts配置文件查找,如果没有再向DNS服务器查找。#include <unistd.h>#include <sys/socket.h>int gethostname(char *name, size_t len); struct hostent *geth

2021-10-04 19:12:03 236

原创 socket选项详解

fcntl系统调用是控制文件描述符的通用POSIX方法,专门用来读取和设置socket文件描述符属性的方法:#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int

2021-10-04 16:29:12 712

原创 地址信息函数

地址信息函数#include <sys/socket.h>int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);getsockname获取sockfd对应的本端socket地址,并将其存到addr中,addrlen是该地址的长度。如果实际socket地址长度大

2021-10-04 13:37:11 57

原创 通用数据读写函数

#include <sys/types.h>#include <sys/socket.h>ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags);struct msghdr { void *msg_name; /* socket地址 */ socklen_t

2021-10-04 13:02:49 73

原创 UDP数据读写

UDP数据读写系统调用#include <sys/types.h>#include <sys/socket.h>ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,

2021-10-04 12:54:05 574

原创 数据读写flags选项的使用-MSG_OOB

客户端代码#include <iostream>#include <cstring>#include <cassert>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include

2021-10-04 11:49:51 353

原创 数据的读写

数据读写#include <sys/types.h>#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t send(int sockfd, const void *buf, size_t len, int flags);recv读取sockfd上的数据,buf和len分别指定缓冲区的位置和大小,flag通常是设为0。返回值是实际读取到数据的长度。

2021-10-03 19:54:59 125

原创 字节序转换API

字节序转换API#include <netinet/in.h>typedef unsigned long UL;typedef unsigned short US;UL htonl(UL data);US htons(US data);UL ntohl(UL data);US ntohs(US data);计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值0x2211使用两个字节储存:高位字节是0x22

2021-10-03 18:12:17 112

原创 IP地址转换函数

IP地址转换函数ipv4地址之间的转换#include <arpa/inet.h>in_addr_t inet_addr(const char* strptr);int inet_aton(const char* cp, struct in_addr* inp);char* inet_ntoa(struct in_addr_in);ip地址的表示:字符串:点分十进制(记录日志需要转换为字符串)。整数:存储ip地址的32bit(编程的时候需要转换为整数)。#include &l

2021-10-03 18:09:25 372

原创 服务器编程基础API

基础API创建socketsocket函数命名socket监听socket接受连接发起连接关闭连接创建socketsocket函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);命名socket监听socket接受连接发起连接关闭连接...

2021-10-03 18:05:43 183

原创 2021-08-20

条款03:尽可能使用constconst修饰变量。场景:如果变量本身不应该被修改,应该使用const修饰。这样编译器可以进行保护,确保这个变量不会被修改。关键字const出现在星号左边,表示被指物是常量。关键字const出现在星号右边,表示指针自身是常量。const修饰函数。修饰参数时,和修饰一般变量相同。修饰返回值,可以降低因客户错误而造成的意外。A a, b, c; // 类类型... if (a * b = c) {//其实是想做一个比较动作,使用con

2021-08-20 15:43:33 53

原创 2021-08-14

无序序列中的第K大数模板#include <iostream>using namespace std;const int N = 1e6 + 10;int q[N], n, k;int quick_select(int l, int r, int k){ if (l >= r) return q[l]; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j)

2021-08-14 18:24:14 51

原创 在ubuntu20.04中配置Linux0.11实验环境

在ubuntu20.04中配置Linux0.11的实验环境实验准备Vmware (虚拟机)ubuntu20.04 ios 镜像 版本:amd64 Desktop LiveDVD(操作系统镜像)Linux0.11源码(实验所需)实验所需软件下载Vmware,下载VMware Workstation Proubuntu20.04 ios镜像点击“获取下载连接”(右侧中间像蓝色的按钮)点击选中的那个版本,便会自动下载。Linux0.11源码 密码: 4mu0虚拟机中配置ubuntu

2020-05-25 18:57:21 2542 12

原创 表达式计算

1. 问题描述表达式是数据运算的基本方式。人们书写习惯是中缀式如:11+22*(7-4)/3。中缀式的计算是按照运算符的优先级及括号优先的原则,相同级别从左到右计算。表达式还有后缀式(如:22 7 4 / 11 +)和前缀式(如:+ 11 / * 22 – 7 4 3)。后缀表达式和前后最表达式中没有括号给计算带来方便。如后缀式计算时按运算符出现的先后顺序进行计算。本设计的主要任务是进行表达式形...

2020-01-12 00:58:13 1545

翻译 assert.h

ssert.h 定义一个可用作标准调试工具的宏函数(Macro functions):void assert (int expression);evaluate assertion如果具有功能形式的此宏的参数表达式比较等于零(即,表达式为false),则会将一条消息写入标准错误设备,并且中止被调用,终止程序执行。显示的消息的详细信息取决于特定的库实现,但是它至少应包括:断言失败的表达式...

2019-12-28 19:25:54 252

原创 顺序队列

#include <iostream>#include <exception>#include "marco_define.h"using namespace std;template<class T>void CheckBad_alloc(T* ptr);template<class T>class Seq_queue{p...

2019-12-26 14:33:55 56

原创 C++实现栈

(原创,引用请声明)本人目前还在读大学,若对代码有疑问,评论即可,我会一一回复,若有不足,还请大佬指正。#pragma once#ifndef SEQSTACK_H#define SEQSTACK_H#include <iostream>#include <exception>using namespace std;void OverflowInfo();...

2019-12-23 09:06:51 131

空空如也

空空如也

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

TA关注的人

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