- 博客(32)
- 收藏
- 关注
原创 有效的括号字符串:星号能变三种字符,为什么只需记录两个数?
可以设计一个括号模板检查工具:模板里只有一种括号,部分位置留作占位符,每个占位符允许填左括号、右括号或留空。读到第三个字符时,星号当空串能让已读部分全部匹配,星号当左括号则还剩一个左括号;连最多能保留的左括号都不够用了,说明当前右括号无论如何都接不住。星号在左括号前面,不能拿它当右括号去匹配后面的左括号。,左右括号数量虽然相同,第一个右括号却没有更早的左括号可以匹配,因此仍然无效。星号当空串的情况也没有丢掉,它对应原来的数量,位于扩展后的范围里。,当右括号的选择不可行,但当空串或左括号仍然可行,所以保留。
2026-10-04 19:33:22
429
原创 不排序,怎么找到第 K 大的数?
同分成绩也各占一个位置,不做去重。如果数字范围扩大到很大,或者改为任意小数,就不适合照搬这个计数数组。既然知道某个数有几个,就能一次跳过这一批名次,不必真的把所有元素重新排列。因此,一旦目标名次落入当前这批相同数字,它们的数值就是答案。两题都统计次数,但排序依据不同,不能把“数值大”和“出现多”混为一谈。因此,从计数数组的末尾向前扫描,就是从大数往小数查找。表格省略了未出现的数字。我们可以准备一个计数数组,记下每个数出现了几次。固定,但实际仍需要 20001 个计数位置。这也正是重复元素不能去重的原因。
2026-09-30 10:27:09
305
原创 盛水最多,为什么每次都要移动短边?
可以设计一个二维容器布局小工具:给出若干候选挡板的位置和高度,选择两块,让围出的面积最大。这个推广依赖相同的条件:高度非负、水位由两端较低者决定,内部挡板不额外限制水位。:它同样移动两个边界,但依据的是正数区间和的变化;这题依据的是宽度与短边的限制,移动规则各有原因。每次排除的组合都不可能超过已记录的面积,因此不会漏掉最优答案。两边等高时,移动任意一边都成立,下面的代码固定移动左边。每次只选两条线当边界,中间的线不参与这次水量计算。注意,移动短边只是有机会遇到更高的边,,也就是这个二维模型中的最大面积。
2026-09-30 10:04:46
360
原创 DFS 和 BFS:先走到底,还是一层层找?
递归背后使用的是调用栈:后进入的调用先结束。也可以自己维护一个栈实现 DFS,入门时先理解递归版就够了。BFS 的最少步数结论,也依赖“每一步代价相同”这个条件。节点可以理解成一个个地点,连接节点的线叫作“边”。沿着这些连接,按一定顺序访问节点,就是遍历。分别运行 DFS 和 BFS 时,要各用一份重新初始化的访问记录。同一张图,DFS 和 BFS 都能找到从起点出发可以到达的节点。它先处理距离起点一步的节点,再处理两步的、三步的。先把近的一层处理完,才轮到更远的一层。:从队尾加入,从队首取出,就像排队。
2026-09-29 11:11:27
327
原创 3 点半,时针和分针的夹角为什么不是 90°?
1344. 时钟指针的夹角数学 · 几何分针指着 6,时针指着 3,看起来应该是直角。问题就在后半句:到了 3 点半,时针还停在 3 吗?
2026-09-23 14:29:08
179
原创 1658. 将 x 减到 0 的最小操作数
给定一个正整数数组nums和一个正整数x。每次操作,可以删除的一个元素,并从x中减去这个元素的值。删除后,后续操作只能选择剩余数组的两端。求让x恰好变成0的最少操作次数。如果无法做到,返回-1。允许删除所有元素。依次删除右端的3和2x从5变为2,再变为0。每个元素都大于4,无法恰好减到0。删除左边的[3, 2]和右边的[1, 1, 3],共删除5个元素,元素之和为10。
2026-09-23 09:32:20
141
原创 49. 字母异位词分组
给定一个字符串数组strs,请按字母异位词进行分组:能够通过重新排列字母变成同一个单词的字符串,放入同一组。返回分组后的字符串数组,组与组之间、组内字符串的顺序都不限。如果两个单词包含的字母及其出现次数完全相同,只是排列顺序可能不同,它们就是字母异位词。例如eatteaate可以分为一组。ab和aab不能分为一组,因为a的数量不同。
2026-09-22 10:24:25
145
原创 146. LRU 缓存
LRU缓存通过哈希表与双向链表结合,实现O(1)时间复杂度的get和put操作。哈希表快速定位节点,双向链表按使用顺序维护,头部为最近使用,尾部为最久未使用。每次访问或更新均将节点移至头部,容量满时淘汰尾部节点。C++版本用list与unordered_map,C版本用数组索引与哨兵节点,均保证高效插入、删除与移动。关键点:访问即更新顺序,更新不增加容量,淘汰最久未使用项。
2026-09-21 11:07:17
149
原创 347. 前 K 个高频元素
本题要求找出数组中出现次数最多的前 k 个不同元素。使用哈希表统计频次,再用“桶排序”思想:创建大小为 n+1 的桶,索引表示出现次数,将相同频次的数字放入对应桶中。从高频率桶向低频率桶遍历,依次取出数字,直到收集到 k 个元素为止。时间复杂度为 O(n),空间复杂度为 O(n),高效且符合进阶要求。
2026-09-18 10:13:26
74
原创 码农面试之自我介绍参考与收集
自我介绍:面试官你好,我叫xxx,xx岁,xx年毕业于xx大学xx专业,目前就职于xx公司,xx年工作经验,主要核心编译语言是c/cpp,Python;会xxxx,有xxxx的实践经验。熟悉使用常用的数据结构,比如说链表,树,哈希表等。最近xx年是在xxxx工作,主要工作内容是xxxxxxx开发,偏科研方向,toB方向。做过什么,其什么能力提高了多少。了解到贵公司什么岗位什么什么,和我的技术栈/职业规划很符,对这个很感兴趣,希望能有机会加入,谢谢!面试官常见问题:5. 看到这的大佬们可以在评论区分享一
2026-03-13 13:38:40
258
原创 数据结构之队列详解+用栈实现队列
本文介绍了数据结构中队列的基本概念和实现方式。队列是一种先进先出(FIFO)的线性数据结构,支持入队和出队操作。文章详细讲解了顺序队列(数组实现)和链式队列(链表实现)的特点,包括环形数组解决空间浪费问题的方法。同时提供了C++中不同队列容器(queue、deque、priority_queue)的常用操作对比表,涵盖时间复杂度等关键信息。最后提出用栈实现队列的设计思路:通过两个栈互相倒换,利用"负负得正"原理将先进后出转换为先进先出。这种实现方式体现了数据结构的灵活应用和相互转换的可能
2025-11-13 11:57:54
666
原创 数据结构“栈”详解
本文详细介绍了数据结构栈的概念、操作和实现方式。然后通过C++示例代码展示了STL中stack容器的使用,并演示了如何用vector实现带有最大容量的自定义栈。最后介绍了设计具有getMin功能的栈的方法,通过辅助栈来跟踪最小值。
2025-11-12 14:24:40
485
原创 IO多路复用之epoll模型-详细解释
文章摘要: 本文详细介绍了Linux下的epoll多路复用模型,重点解析了ET(边沿触发)模式和EPOLLONESHOT(单次触发)事件机制。通过示例代码演示了水平触发(LT)服务器的实现,服务器每次仅接收1字节数据并回显,配合事件日志说明工作流程。关键内容涵盖epoll结构体、函数接口(epoll_create1/epoll_ctl/epoll_wait)、事件类型表(如EPOLLIN/EPOLLET等),并强调实践建议:逐示例编译运行以加深理解。适用于需要高效处理高并发网络连接的场景。
2025-11-10 13:35:30
740
原创 C++ (STL)之unordered_map详解
本文介绍了unordered_map的实现与特性;常用接口函数及其作用;常用函数示例;应用方向与题型;以及常见坑,
2025-11-07 15:50:24
1887
原创 C++ (STL)之set/unordered_set/multiset/unordered_multiset详解
本文详细介绍了C++ STL中四种关联容器的特性与用法。set基于红黑树实现,元素有序且唯一,支持O(log n)查找/插入/删除操作;unordered_set采用哈希表实现,无序但查询效率更高(平均O(1));multiset和unordered_multiset允许重复元素。文章通过示例代码演示了容器常见操作,包括构造、插入删除、查找统计等,并标注了C++17/20新增功能。这些容器在元素唯一性、排序需求等场景下各有优势,开发者可根据实际需求选择使用。
2025-11-06 14:50:50
1075
原创 IO多路复用之epoll相关详解用法-LT/ET版本-带详细注释
本文详细介绍了Linux中epoll多路复用机制的核心概念与使用方法。以及2种触发模式及其示例。
2025-11-06 10:50:10
1034
原创 C++ 标准模板库(Standard Template Library,STL)之vector详解
vector是C++ STL中最常用的序列容器,具有连续内存、随机访问O(1)和尾部插入均摊O(1)的特性。它支持自动扩容,相比数组功能更强大。
2025-11-05 16:34:37
945
原创 C++ 标准模板库(Standard Template Library,STL)基础详解--stl学习查询收藏这一篇就够了
本文系统介绍了C++标准模板库(STL)的核心概念和常用容器。STL由容器、算法、迭代器等组件构成,采用模板实现泛型编程。
2025-11-05 15:44:00
1087
原创 IO多路复用之poll函数-非阻塞版本
本文介绍了IO多路复用中poll函数的非阻塞版本实现。首先对比了poll阻塞/非阻塞模式的特点,以及socket阻塞/非阻塞模式的区别,重点分析了timeout参数对poll行为的影响。通过表格形式详细展示了不同组合的应用场景和特性:poll阻塞+非阻塞socket是最高效的常见组合。文中提供了设置socket非阻塞的代码示例,并给出了一个完整的poll阻塞+非阻塞socket的服务器实现,采用水平触发模式处理数据接收。该实现通过单线程高效处理多连接,避免了线程阻塞问题,适合高并发网络服务场景。
2025-10-31 15:47:37
1250
原创 docker从0开始创建一个容器-命令大全
本文介绍了Docker的基础知识及使用方法,主要包括:docker的概念、容器常用指令,镜像常用指令;目的帮助小白快速了解Docker并创建一个自己的容器
2025-10-31 14:24:11
854
原创 IO多路复用之poll函数详解用法-带详细注释-阻塞版本
IO多路复用poll函数详解 poll是一种IO多路复用机制,允许单线程同时监听多个文件描述符的事件状态。介绍了poll的使用,以及常用事件标志宏;与select的对比;以及poll的工作流程和示例
2025-10-30 15:03:15
617
原创 linux下使用venv管理python虚拟环境全流程
本文介绍了在Linux下使用Python内置venv模块管理虚拟环境的完整流程。主要内容包括:1)不同Python版本带来的兼容性问题;2)venv工作原理,包含环境隔离、目录结构和包管理机制;3)详细使用步骤:安装venv、创建/激活/停用虚拟环境、指定Python版本、安装依赖包等操作;4)完整Shell指令示例。通过venv可以创建独立的Python运行环境,有效解决不同项目间的版本冲突问题。该工具轻量易用,是Python开发中管理依赖环境的推荐方案。
2025-10-30 12:09:02
1385
原创 C++ 语言核心之std::move与std::forward函数的区别,学习左值与右值
本文摘要: C++中的std::move和std::forward用于处理值类别转换。左值右值将亡值区别。
2025-10-29 15:24:32
1169
原创 IO多路复用之select函数详解用法-带详细注释
IO多路复用之select函数详解 select是Linux/Unix系统中经典的I/O多路复用机制,允许单线程监控多个文件描述符的I/O状态(可读、可写、异常),当有描述符就绪时唤醒程序处理。其特点包括跨平台支持、简单易用,但存在FD_SETSIZE限制(通常1024)和O(n)扫描的性能问题。 select函数接收5个参数:最大文件描述符值+1、可读/可写/异常事件集合以及超时设置。使用时需配合FD_ZERO、FD_SET等宏操作fd_set位图集合。 示例展示了select实现回声服务器的核心流程。
2025-10-28 14:24:08
422
原创 IO多路复用[select,poll,epoll]常用函数,概念,详解
本文摘要: IO多路复用技术通过单线程管理多个IO通道,提高并发处理效率。核心概念包括注册关注事件、等待事件发生和分发处理。主要方法对比: select - 跨平台但效率低,使用位图管理fd,有1024限制; poll - 改进select的fd数量限制,但仍需O(n)扫描; epoll - Linux高效方案,O(1)复杂度,支持边缘触发和水平触发模式。 关键区别:select/poll每次调用需重建fd集合,epoll则在内核维护兴趣列表。epoll适合高并发场景。
2025-10-27 15:57:49
919
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
4