自定义博客皮肤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)
  • 问答 (1)
  • 收藏
  • 关注

原创 位运算的常见用途列举

本文总结了位运算的常见应用场景和技巧,包括状态压缩、异或操作、位操作优化等。主要内容包括:1)位操作基础技巧如测试/置位/清零/切换位、lowbit操作及内置函数;2)实用场景如判断奇偶/2的幂、快速乘除、博弈论、汉明距离计算等;3)进阶应用如子集枚举、状态DP、异或问题、SOS DP及bitset优化;4)特别说明了位运算的注意事项,如使用1LL/1ULL避免溢出、避免左移溢出等。文中提供了大量C++代码示例,适合算法竞赛和编程优化参考。

2025-09-25 10:30:39 659

原创 红黑树与AVL树的区别

AVL树和红黑树是两种自平衡二叉搜索树,主要区别在于平衡策略和性能特点。AVL树通过严格高度平衡(左右子树高度差≤1)实现高效查找(O(logn)),但插入/删除时旋转操作较多;红黑树采用弱平衡(黑高相等、无连续红节点),插入/删除更快但查找稍慢。AVL树适合查找频繁场景,红黑树因更新效率高更受工业界青睐(如Java集合、C++ STL)。总体而言,AVL树侧重查找性能,红黑树平衡了读写效率,应用更广泛。

2025-09-25 10:28:45 305

原创 HashMap是如何解决哈希冲突

本文介绍了哈希冲突及其解决方法。哈希冲突是不同键映射到相同数组下标的情况,主要有拉链法和开放地址法两种处理方式。拉链法使用链表存储冲突元素,简单高效;开放地址法直接在数组中寻找空位,更节省空间。Java中的HashMap采用链表+红黑树组合方案,当链表过长时转为红黑树提升性能,并通过负载因子触发扩容(默认0.75)和哈希扰动优化来分散冲突。这些机制保证了HashMap在冲突处理上的高效性。

2025-09-25 10:27:05 457

原创 初学编程——Redis简介

Redis是一个高性能内存数据库,支持多种数据结构和持久化。它常用于缓存、分布式锁等场景。分布式锁需满足互斥性、安全释放等属性,通过SET命令获取锁,Lua脚本安全释放。缓存存在穿透、击穿、雪崩等问题,可通过布隆过滤器、互斥锁、随机TTL等策略解决。Redis适合高性能场景,强一致性需求建议使用etcd等。

2025-09-25 10:25:22 797

原创 初学编程——简介MySQL

MySQL是一个关系型数据库管理系统,使用表存储结构化数据,支持SQL操作。主要概念包括数据库、表、行、列、主键和外键等。MySQL支持多种数据类型,如数值、字符串和日期类型。基本SQL操作包括创建表、插入、查询、更新和删除数据。高级查询涉及聚合函数、分组、多表查询和子查询。索引可优化查询速度,事务(ACID特性)确保数据一致性。InnoDB和MyISAM是常见存储引擎,分别支持事务和表锁。数据库可通过mysqldump备份恢复。示例展示了博客系统的用户、文章和评论表设计及关联查询。

2025-09-23 09:07:03 356

原创 初学编程——简单介绍Gin-Echo

Gin和Echo都是Go语言中流行的轻量级Web框架。Gin以高性能见长,适合高吞吐服务;Echo功能更齐全,内置中间件丰富,适合快速开发REST服务。两者在路由性能、中间件链、数据绑定等方面差异不大,都支持模板渲染、静态文件等基础功能。代码示例显示两者的基本用法非常相似,Gin使用gin.H返回JSON,Echo直接返回map。选择时可根据需求权衡性能与功能完整性。

2025-09-23 09:02:38 233

原创 Dijkstra算法

Dijkstra算法是一种高效的贪心算法,用于解决带权有向/无向图的单源最短路径问题(边权非负)。其核心思想是通过维护每个点的当前最短距离,每次选择未确定点中距离最小的点,用其松弛邻接点。实现采用邻接表和最小堆优化,时间复杂度为O((V+E)logV)。算法具有贪心选择性质,一旦确定某点最短距离便不再改变。文章提供了C++和Go的实现模板,包含路径还原功能,并指出稠密图可使用O(V²)的邻接矩阵实现。常见注意事项包括处理不可达点、多组数据初始化、避免负权边等。该算法是解决非负权图最短路径问题的经典选择。

2025-09-23 09:00:03 497

原创 初学编程——go的并发

本文介绍了Go语言并发编程的核心机制:1) Goroutine是轻量级协程,通过go关键字启动,采用M:N调度模型;2) Channel是线程安全的通信管道,支持阻塞式数据传递,常用于生产者-消费者模式;3) Select实现多路复用,监听多个Channel操作;4) Context用于跨Goroutine传递取消信号和超时控制;5) sync.Mutex提供互斥锁保护共享资源。这些机制共同构成了Go强大的并发编程能力,通过代码示例展示了各特性的基础用法。

2025-09-23 08:58:06 253

原创 初学编程——go的基础语法

本文简要介绍了Go语言的基础语法特性。主要内容包括:程序结构(包声明、import、main函数)、变量与常量定义、基本数据类型、运算符、控制结构(if/else、switch、for循环)、复合类型(数组、切片、map)、函数定义、指针使用、结构体与方法、接口实现、并发编程(goroutine和channel)、错误处理方式以及包管理工具go mod。重点展示了Go语言的简洁语法特性,如:=短变量声明、多返回值、隐式接口实现和独特的并发模型。这些基础语法构成了编写Go程序的核心要素。

2025-09-23 08:56:24 285

原创 初学编程——简介线段树

线段树是一种高效维护区间信息的数据结构,支持O(logN)时间复杂度的单点修改、区间修改和区间查询(如求和、最大值、最小值等)。其基本结构采用二叉树形式存储,每个节点代表一个区间,左/右子节点分别表示区间的左右半部分。通过递归建树,初始化各节点值。区间查询时,通过与当前节点区间的交集情况决定是否递归查询子节点。线段树的空间复杂度在堆式存储下约为4n,但可通过优化降至2n-1。该数据结构在多种编程语言中都有实现,包括C++、Python、Go和Java等。

2025-09-16 09:34:17 889

原创 初学编程——Linux下常见命令

本文整理了Linux系统中常用的命令,分为10大类:1)文件与目录操作,包括ls、cd、tree等;2)文件查看与处理,如cat、less、diff等;3)权限与用户管理,涵盖chmod、useradd等;4)系统信息与硬件查询,如uname、lscpu等;5)进程与任务管理,包括ps、kill、top等;6)磁盘与文件系统操作,如df、mount等;7)压缩与解压命令,包含tar、zip等;8)网络相关操作,如ping、ssh、scp等;9)软件包管理命令;10)shell快捷方式与系统监控工具。这些命令

2025-09-16 09:31:28 533

原创 初学编程——简介git常见命令

本文总结了Git常用命令及团队协作开发流程。主要内容包括:本地仓库操作(初始化、分支管理、提交修改)、远程仓库交互(拉取、推送代码)、协作开发(合并分支、解决冲突、rebase)、提交规范与历史管理(日志查看、版本回退)、团队高级用法(代码评审、子模块、多远程仓库)等。重点介绍了日常开发流程:创建功能分支、提交代码、推送分支、提交PR/MR、解决冲突等规范操作,帮助开发者高效使用Git进行版本控制和团队协作。

2025-09-16 09:29:46 1004

原创 初学编程——简介归并排序

归并排序是一种高效稳定的排序算法,采用分治策略:将数组递归分成两半,分别排序后合并。时间复杂度为O(n logn),空间复杂度O(n)。它特别适合处理大规模数据,且能保持相同元素的相对顺序。文章提供了Go和Java的实现代码,展示了归并排序的递归分治和合并过程。两种语言实现都遵循相同的算法逻辑:先分割数组,递归排序子数组,最后合并已排序的子数组得到最终结果。

2025-09-16 09:27:43 180

原创 初学编程——简介数组

数组是一种线性数据结构,用于存储相同类型的元素,在内存中连续分配。其特点包括固定长度、随机访问和连续存储。数组操作包括创建、访问、遍历以及插入删除元素。在Go和Java中,可通过下标访问数组元素,使用循环遍历数组。对于插入和删除操作,由于数组固定长度,效率较低,需要移动大量元素。动态数组(如Go的slice和Java的ArrayList)提供了更灵活的长度扩展方式。

2025-09-16 09:24:20 209

原创 C++中的内存分配

C++内存管理摘要:C++程序内存分为栈、堆、全局/静态、常量和代码区。内存分配方式包括自动分配(栈区)、动态分配(new/delete)和静态分配(全局变量)。现代C++推荐使用智能指针(unique_ptr/shared_ptr)管理堆内存,避免内存泄漏和野指针问题。STL容器结合智能指针是高效内存管理的核心,建议取代传统裸指针和malloc/free。对于包含指针成员的类,必须实现深拷贝以避免内存重复释放。

2025-07-11 19:51:35 486

原创 C++中的RAII简述

RAII(资源获取即初始化)是C++中重要的资源管理技术,通过将资源获取与对象生命周期绑定来实现自动管理。常见应用包括内存(智能指针)、文件(ifstream)、互斥锁(lock_guard)等。相比传统手动管理方式,RAII具有自动释放资源、避免泄漏、保证异常安全等优势。典型的实现方式包括构造函数获取资源,析构函数释放资源,使资源管理更安全高效。这种模式广泛应用于标准库的智能指针、文件类和锁类等组件中。

2025-07-11 19:50:24 454

原创 C++指针

C++指针基础摘要:指针是存储变量地址的变量,声明为type *name。指针操作包括定义、赋值和使用*运算符访问值。指针支持算术运算、与数组的关联操作,可以组成指针数组或多级指针。指针还可用于函数参数传递和返回值,实现高效内存访问和数据修改。关键概念包括空指针、指针运算、指针与数组关系等,是C++内存管理和高效编程的核心工具之一。

2025-07-11 17:37:16 379

原创 C++引用

C++引用摘要 引用是已存在变量的别名,必须在定义时初始化且不可重新绑定。与指针相比,引用更安全(不能为null)、语法更简洁(直接访问无需解引用),但不支持多级间接访问和重新绑定。引用常用于函数参数传递和返回值,编译器通常将其优化为直接操作目标对象。指针更灵活但风险更高,可以重新指向其他对象且支持多级间接访问。引用不占额外内存,而指针需要存储地址信息。两者在参数传递、数组处理等方面也有显著差异。

2025-07-11 17:10:03 404

原创 CF1389A题解

找出满足题意的x和y输出,没有则输出-1 -1。

2025-05-25 00:04:56 423

原创 计算机组成原理——头歌平台运算器设计实验报告

32位加法器,含符号溢出和无符号溢出检测电路;32位减法器,可复用加法器+取反,按位或、按位与、按位非,使用基本的逻辑门实现;搭建按位与、或、非、XOR电路,各自使用32位逻辑门实现,利用32位全加器,实现加法等功能,并在最后两级获取进位做溢出检测。由8位可控加减法器的设计可知,当位数大一点,我们发现计算的时间瓶颈在每一位的进位逐位传递,我们可以预先处理符号位进位。进行模块验证,从最低位开始,逐一验证每个进位公式是否正确连接逻辑门,使用输入开关设置不同的P、G组合,检查输出的C是否符合预期。

2025-05-21 22:57:46 2790

原创 CF1996C题解

给定两个长度为 n 的字符串 a 和 b,以及 q 个查询,每次查询一个区间 [l, r],要求计算将 a[l…r] 变换为 b[l…r] 所需的最小操作次数。每次操作可以将一个字符替换为另一个字符。

2025-05-19 15:27:37 546

原创 CF1996D题解

a+b+c<=xa,b,c都为正整数三元组是有序的。

2025-05-19 09:36:02 359

原创 CF1389A题解

给你两个数,l和r,问是否存在两个数x和y,使得.存在的话,输出满足题意的一种即可,不存在则输出-1 -1.

2025-05-19 08:56:46 480

原创 CF1941A题解

左边口袋有n个硬币,右边口袋有m个硬币,现在让你从左边拿一个硬币,右边拿一个硬币,使得它们的和小于等于k,问有多少种组合?

2025-05-19 08:17:22 536

原创 CF935A题解

员工的数量为n,求有多少种方法选择领导数量,从而可以将员工平均分配给他们项目任务。从1到n枚举,找出满足题意的情况加起来即可。

2025-05-18 22:38:21 655

空空如也

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

TA关注的人

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