自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++入门基础

命名空间的定义需要用到namespace关键字,后面接一对花括号{},在里面定义变量/函数/类型;C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期;namespace要定义在全局,也可以循环嵌套;项目中的同名namespace会被合并成一个;C++标准库的namespace为std;

2025-04-17 23:32:11 274 5

原创 从删库到跑路:我的算法救赎之路 Day5

本专栏主要为了巩固,会把比赛中觉得比较好的题目拿过来整理一下。本周专题dfs。对于搜索算法,个人通过这几天的做题感悟:在写代码之前一定要想清楚要搜什么,是搜不同的排列还是搜前面所做的答案等等 ,dfs利用的是递归,它的代码很简洁,递归的决策树一定要画清楚,回溯不但可以通过在递归主体里面回,也可以在参数里面回溯,有些时候对变量的决策是突变性的,导致回溯的时候不好回,这时候可以考虑换种枚举策略。搜素是对暴力枚举的的代码优化;当枚举能画成一棵树时用搜索;

2025-03-30 15:25:59 712 1

原创 多源最短路:Floyd算法の暴力美学

这里我们求环的长度的时候加了三次,是有可能溢出的,根据C++的语法规则,溢出后变成负数,此时结果就被更新成负数,题目中m的范围是5×103,其实我们可以把INF定义为1e8就可以。5. 初始化:由于我们要做min操作,所以开始时要把所有的状态初始化成INF,从i 到 i 的最短路是零,所有还要把 f[i][i] 初始化成零(i从1 到 n)。题目要求A1 A2 A3 --- An,让我们求最小的危险指数,从任意一点到另一点可以经过别的点,所以本题求得任意两点之间的最小危险指数,其实就是求最短路之和。

2025-03-26 17:14:58 597 2

原创 从删库到跑路:我的算法救赎之路 Day4

本专栏主要为了巩固,会把比赛中觉得比较好的题目拿过来整理一下。今天整理昨天落下的F题(其实是补一下KMP算法),以及牛客周赛的D题。

2025-03-24 20:28:30 404 2

原创 从删库到跑路:我的算法救赎之路 Day3

本专栏主要为了巩固,会把比赛中觉得比较好的题目拿过来整理一下。本周主要是前缀和和查分专题,有很多经典的题目。另外还有本周的小白赛和atcoder。

2025-03-23 18:45:05 900 4

原创 从删库到跑路:我的算法救赎之路 Day2

如果。

2025-03-18 20:23:01 364 2

原创 区间操作の神の双手:从入门到入坟的前缀和差分指南

今天咱们要聊的是算法界的"孪生兄弟"——前缀和与差分。这俩货简直就是处理数组问题的"瑞士军刀",一个负责扮猪吃老虎,一个擅长暗度陈仓。准备好瓜子饮料,咱们这就开车!

2025-03-17 22:23:00 805 1

原创 告别无脑遍历!二分查找の降维打击:让100万数据搜索只需眨眼20次

🌟 你用过微信"跳一跳"吗?每次按住屏幕的时间决定了小人的跳跃距离,有没有发现高手总能精准落在目标点?这背后藏着程序员的秘密武器——今天让我们来揭开这个让搜索效率提升10000倍的魔法!

2025-03-16 17:10:10 916 4

原创 从删库到跑路:我的算法救赎之路 Day1

本专栏主要为了巩固基础算法,会把比赛中觉得比较好的题目拿过来整理一下。

2025-03-16 00:03:34 1051 3

原创 并查集习题精讲:从基础到高阶应用

回顾:并查集分为简单并查集、扩展域并查集、带权并查集三种,第一种一般用于解决单元关系问题,后两种可以解决多关系问题。下面是上篇博客的题单。

2025-03-15 13:40:42 864 2

原创 并查集:萌新也能看懂的连通性管理神器

并查集(Disjoint Set Union, DSU),作为高阶的数据结构,专门解决。

2025-03-14 17:16:12 578 2

原创 算法竞赛基础之二叉树

二叉树是一种特殊的树形结构,它的特点是每个结点至多只有 2 颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,次序不能颠倒。•二叉的意思是每个结点最多只有两个孩子。并不是只有两个孩子。•二叉树的孩子被称为左孩子和右孩子。其顺序是固定的,就像人的左右手不能混淆。1.2、特殊的二叉树满二叉树:⼀棵⼆叉树的所有⾮叶⼦节点都存在左右孩⼦并且所有叶⼦节点都在同⼀层上,那么这棵树就称满⼆叉树。

2025-01-13 17:37:56 896

原创 算法竞赛基础之树的基本概念

•树是一种非线性数据结构,由节点和边组成,用于表示层次结构。•有一个特殊结点,叫做根节点,它没有前驱和后继•除根结点外,其余结点被分成 个互不相交的集合 ,其中每⼀个集合 ⼜是⼀棵树,称这棵树为根节点的⼦树。所以我们可以看出树是递归定义的,所以后续的很多关于树的算法题也是递归解决的。1.2 树的基本用语•结点的度:树中一个结点的孩子个数称为该结点的度。•树的度:树中最大的结点的度叫做树的度。•树的高度(深度):树中结点的最大层数叫做树的高度。•。

2025-01-13 16:51:45 1118

原创 二分和离散化

为什么把二分和离散化放一起:因为离散化其实是一种二分整数的过程。相信大家都接触过二分查找(折半查找),这就是二分的思想。二分通过每次舍弃一半并不存在答案的区间,进而快速锁定要求的答案(二分一定有解,但解不一定就是答案,后面会说)

2024-12-28 23:04:50 1103

原创 快速排序与归并排序

我们拿过递归的定义来感受一下这两个排序算法。‌‌递归是一种在数学与计算机科学中常用的算法,它指的是一个过程或函数在其定义中直接或间接地调用自身‌。‌‌递归的定义直接递归:一个函数直接调用自己。间接递归:一个函数通过其他函数间接调用自己。尾递归:递归函数在调用自身后直接传回其值,不对其再加运算。‌递归的应用场景递归通常用于解决可以被分解为更小、更相似子问题的问题,这些问题的解决方案可以重复应用到这些子问题上。

2024-12-19 20:53:37 623 2

原创 数据结构之栈和队列算法题

思路:两个栈pushst popst 然后往pushst里面push ,每当要出队列或者要去队头数据时,就返回popst的栈顶数据,如果popst为空,就一口气把pushst里面的数据全塞进去。(数组实现)思路:创建K(存有效数据的大小)+1的长度,两个指针(严格来讲应该是下标)指向头和尾。首先说明一点,这只是对栈和队列熟练度的考察,并不是栈的更好地实现方式。思路:两个队列,保证有一个队列为空,然后其余操作基于空队列实现。这一题就是反过来用栈实现队列,要实现后进先出。栈的实现在上面有,不重复拷贝了。

2024-12-17 17:00:19 570

原创 数据结构之链表算法题

我们很容易就可以想到一个解决方案:再创建一个链表,把不是val的结点拿过来尾插。这样确实可以但是,我们每次尾插都需要遍历一遍整个链表,这样时间复杂度就变成了O(n^2),因此我们不妨设置一个tail尾结点来指向它的尾。这里面还有一个潜在的问题就是,假如最后一个节点的数值==val怎么办,想一想。

2024-12-12 18:18:21 768

原创 算法的复杂度

数据结构:相互之间存在一种或者多种关系的数据元素的集合数据元素:是组成数据的,有一定意义的基本单位,在计算机中被当做成体处理。也叫做记录。比如在人类社会中,它的数据元素就是人。畜类中,牛羊猪等就是它的数据元素。数据项:一个数据元素可以由多个数据项组成。比如人的数据项可以由眼睛、鼻子、嘴巴等等。数据对象:具有相同性质的数据元素的集合,是数据的子集。比如人都有生日、姓名、性别,把这些拥有相同数据项的数据元素就称为相同性质的数据元素。时间复杂度。

2024-12-01 12:42:09 1161

原创 预处理指令

if!

2024-11-27 21:49:48 1014

原创 动态规划之背包问题

题目描述:有一个容量为m的背包,还有n个物品,他们的重量分别为w1、w2、w3.....wn,他们的价值分别为v1、v2、v3......vn。求可以放进背包物品的最大价值。输入样例:10 42 13 34 57 9输出样例:12解:符号描述:i表示第i个物品,背包容量为j,dp[i][j]表示从下标为0到i,背包容量为j时任意选取物品所得价值的最大值。所以背包问题和函数的递归很像,只不过函数递归时从结果去接近边界,而背包问题是从边界出发,从小问题逐步去接近最终所要求的最优解。

2024-11-26 23:23:44 1426 1

原创 文件相关操作

硬盘(磁盘)上的文件就是我们所说的文件。按照功能分:数据文件,程序文件。

2024-11-26 13:41:24 1107 2

原创 编译和链接

这个时候程序将使⽤⼀个运⾏时堆栈(stack),存储函数的局部变量和返回地址程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程。(3)处理所有的#include,将其产开插到相应的预编译指令处,这个过程是递归进行的,也就是说,包含的头文件中可能有其他的头文件。的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等。(4)链接库指的是系统运行是的基本函数集合(加减符号什么的)和第三方库(比如头文件之类的)

2024-11-25 21:06:00 802

原创 自定义类型:结构体

结构体类型的声明。

2024-11-20 17:52:36 548

原创 数据在内存中的存储

大端存储模式:高地址上存储低字节位,低地址上存储高字节位。小段存储模式:高地址上存储高字节位,低地址上存储低字节位。同上上述,VS2022的存储模式就是小段存储模式。

2024-11-16 15:15:19 1330

原创 C语言的内存函数

这里arr2的首元素是1234,其余全是0。1234的16进制为4D2(内存中的存储看图最右侧)当运行memcpy后可以看到arr1的首元素的第一个字节被改为D2,转化成10进制正好是210。一个整形4个字节,拷贝爱arr2的前20个字节到arr1,即把arr1的前5个整形改为0;- 如果source与destination有任何重叠,拷贝结果是未定义的。memmove基本同memcpy,但是它们两个的区别是。- 比较从ptr1与ptr2往后的num个字节。- 这个函数的作用是将source的前num个。

2024-11-14 21:05:57 971

原创 字符函数和字符串函数

1.字符分类函数1.字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.h。

2024-11-10 23:18:57 764

原创 超详细!!!深入理解指针(6)

sizeof和strlen的对比。

2024-11-09 20:13:07 685

原创 超详细!!!深入了解指针(2)

在前面文章提及关键字的时候讲到const可以修饰变量,函数。先来看看例子:const具有常属性的意思,被他修饰的(本质还是变量)。但是如果我么绕过直接对a修改,利用他的地址找到并修改它呢?可以看*pa绕过了const确实把a改了,但是我们用const修饰他不就是为了不被修改吗???所以我们要对const的指针进行限制就可以避免这种情况。1.2const 修饰指针变量const修饰指针可以放在,一个是*前面,一个是*后面,他们的意义是不一样的。

2024-11-09 08:54:43 814

原创 超详细!!!深入了解指针(1)

3.指针变量类型的意义3.1指针的解引用既然指针大小与指针类型无关,那么还要指针类型干什么呢?先看两段代码:调试我们可以看到,上面代码会将n的4个字节全部改为0,但是下面代码只是将n的第⼀个字节改为0。结论:指针的类型决定了,对指针解引用的时候有多大的权限(⼀次能操作几个字节)。3.2指针+-整数依旧先看一段代码char*类型的指针变量+1跳过1个字节,int*类型的指针变量+1跳过了4个字节。结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。3.3void* 指针。

2024-11-08 12:50:27 1213

原创 C语言操作符详解

算数操作符:+ - * / %移位操作符:>> <<位操作符:& | ^赋值操作符:= 、+=、-=、%=、/=、>>=、<<=、&=、|=、^=单目操作符:!++ -- &(取地址) *(解引用) ~(按位取反) sizeof(类型) +(正号) -(负号)关系操作符:> < >= <= ==!逻辑操作符:&& ||条件操作符(三目操作符):?逗号表达式:,下表引用操作符:[]函数调用操作符:()结构体成员访问操作符:. 、 ->

2024-11-02 18:28:18 1226

原创 C语言之扫雷小游戏

1.使用控制台应用实现扫雷功能。2.游戏可以选择游玩与退出,一次不过瘾继续游玩。3.可以自定义棋盘的大小、雷的个数。4.如果选择的位置是雷则炸死游戏结束,如果不是则显示周围雷的个数,直到剩余位置全是雷,游戏胜利。

2024-10-25 21:43:25 1121

原创 C语言学习之函数

函数自定义的一般格式ret_type fun_name(形参)ret_type 函数的返回值类型{} 里面放的是函数功能实现的语句fun_name 是函数名括号中放的是形式参数我们可以形象的把函数比作一个工厂,我们给它提供原料(参数),并告诉他我们想要什么(如返回一个值、实现打印功能、实现两个数的互换),工厂通过自己的手段对原料进行加工(函数体内语句的实现)来完成我们的需求。声明格式:可以简单的记为函数定义加个分号函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的。

2024-10-24 22:12:30 871

原创 C语言学习——数组

我们知道C语言中有许多数据类型,对于单个类型的存储我们可以定义一个变量,那么多个数据类型的存储用什么呢?——数组——数组中存放的是1个或者多个数据,但是数组元素个数不能为0- 数组中存放的多个数据,类型是相同的数组可以分为一维数组和多维数组(二位数组最为常见)

2024-10-21 15:52:46 1050

原创 C语言练习之猜数字游戏

1.在电脑上生成1-100的随机数2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈。

2024-10-20 12:23:56 1296

原创 分⽀和循环

C语言是一门结构化的的语言,而生活中的结构归根结底无非就是顺序结构、分支结构、循环结构。我们才C语言中用if、switch来实现分支,用for、while、do while来实现循环。

2024-10-17 18:35:10 1030

原创 函数递归之青蛙跳台阶问题

F(n)=F(n-1)+F(n-2),以此类推,F(n-1)=F(n-2)+F(n-3)…直到n=1,2 F(1)=1,F(2)=2;想要跳到第n级台阶,无非就是从第n-1级台阶向上跳一级,或者从第n-2级台阶往上跳两级,即。可以发现当n=40时F(3)被计算了39088169次!这就是函数的递归:当我们想要的到这个函数的结果时需要再次调用者函数。我们将跳法的个数叫做F(n),不妨从n比较下的时候寻找一下规律。实际上我们只需要计算一次F(3)即可,下面是优化的代码。那么为什么会这样呢?

2024-10-13 18:21:27 364

原创 C语言数据结构和变量

printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏。printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。

2024-10-12 16:06:07 778

原创 分支循环语句

C语言是一门结构化的程序设计语言,里面包含三总结构1.顺序结构2.选择结构3.循环结构就后面两种C语言给出了对应的分支循环语句。

2024-10-05 15:56:55 746

原创 C语言的常见概念

C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。C语言中一些保留的名字C语⾔的32个关键字如下:externstatic注意:1.关键字不能自己创建2.关键字不能作为变量名3.关键字有的特殊含义 不能自己修改。

2024-10-03 14:03:05 834

原创 初识C语言1.2

a:b) 前括号在使用是会被替换为后括号。

2024-10-01 18:13:35 442

空空如也

空空如也

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

TA关注的人

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