- 博客(360)
- 收藏
- 关注
原创 代码训练LeetCode(46)旋转图像
摘要: 本文探讨了LeetCode矩阵置零问题,要求将矩阵中0元素所在行列全部置零,且需原地操作。分析采用两次遍历策略:首次标记需置零的行列,第二次执行置零操作。示例代码使用两个一维数组存储标记,空间复杂度O(m+n),时间复杂度O(m*n)。该方案在限制条件下实现高效处理,适用于类似矩阵操作场景,强调优化空间使用的重要性。
2025-07-12 22:01:00
351
1
原创 代码训练LeetCode(45)旋转图像
摘要: 本文探讨了如何原地旋转n×n矩阵90度的问题。通过分析旋转规律,提出先转置矩阵再反转每行的解决方案。以3×3矩阵为例展示了操作步骤,最终实现的空间复杂度为O(1),时间复杂度为O(n²)。代码通过双重循环完成转置和行反转操作,强调了对矩阵操作的理解和原地修改技巧的重要性。这类问题有助于提升对数组处理能力和编程技巧的掌握。
2025-07-12 21:59:35
287
原创 代码训练LeetCode(44)螺旋矩阵
这个问题考察了对矩阵的遍历操作,特别是在不同的遍历顺序下如何有效处理边界条件。通过这种类型的问题,可以加强对数组操作和循环控制的理解。为了提升编程能力,建议多练习类似的矩阵操作问题,这有助于提高对多维数组处理的熟练度和对循环控制逻辑的把握。
2025-07-02 21:59:32
614
4
原创 代码训练LeetCode(43)有效的数独
这个题目考察了数组的使用、布尔逻辑及简单的算法思维。通过这类问题,可以增强对基本数据结构的理解和操作能力。要提升编程能力,建议多练习类似的逻辑判断和数组操作题目,以锻炼思维和编程技巧。
2025-07-02 21:58:14
870
2
原创 libevent(2)之使用教程(1)介绍
Libevent 是用于开发快速可移植非阻塞 IO 程序的库,其设计目标包括:使用 Libevent 编写的程序应能在所有 Libevent 支持的平台上运行。即便在没有理想非阻塞 IO 实现的情况下,Libevent 也应支持次优方案,确保程序能在受限环境中运行。Libevent 会尝试在各平台上使用可用的最快非阻塞 IO 实现,且尽量不引入过多开销。Libevent 的设计即使在程序需要管理数万个活跃套接字时也能良好工作。
2025-06-29 13:41:58
1344
35
原创 代码训练LeetCode(42)串联所有单词的子串
题目要求我们找出所有可能的“串联子串”的起始索引。这些串联子串是由给定数组 `words` 中的所有字符串以任意顺序排列连接形成的。所有 `words` 中的字符串长度都是相同的。
2025-06-28 12:38:17
834
7
原创 代码训练LeetCode(41)无重复字符的最长子串
这个题目要求我们找出给定字符串中最长的不含重复字符的子串,并返回这个子串的长度。字符串可能由英文字母、数字、符号和空格组成。为了解决这个问题,我们可以使用滑动窗口的方法。滑动窗口是一种可以将嵌套的循环问题转换为单循环问题,从而降低时间复杂度的技术。具体到这个问题,我们可以定义两个指针,一个指向子串的开始位置,另一个随着遍历逐步向后移动,从而形成一个窗口。我们还需要一个数据结构来存储窗口内的字符,以快速判断字符是否重复,通常使用哈希表实现。
2025-06-28 12:37:24
525
3
原创 libevent(1)之基础概述
libevent是一个功能强大的跨平台事件驱动库,在高性能网络编程领域有着广泛的应用。它最初由Niels Provos等人开发,最早可以追溯到2000年。经过多年的发展演进,目前已经成为了业内公认的优秀开源项目之一。作为一个专注于事件驱动和异步I/O的编程库,libevent帮助开发者以一种高效而统一的方式处理各种类型的事件,比如网络I/O、定时器、信号等。它能够自动利用操作系统提供的最佳I/O多路复用机制,如Linux上的epoll、BSD上的kqueue等,从而实现了可移植性和高性能。
2025-06-24 22:07:44
1462
26
原创 代码训练LeetCode(40)长度最小的子数组
这个问题要求我们在一个由正整数构成的数组中找到总和大于等于给定值 `target` 的最短子数组,并返回这个子数组的长度。如果没有这样的子数组,我们需要返回0。我们可以使用**滑动窗口**的方法来解决这个问题。滑动窗口是一种用于处理数组/列表中元素的连续问题的有效方法。基本思想是,保持两个指针,表示当前的窗口的开始和结束位置,并根据当前窗口的值来调整指针,直到找到满足条件的窗口。
2025-06-24 22:01:03
403
2
原创 代码训练LeetCode(39)三数之和
题目要求在一个整数数组 `nums` 中找出所有唯一的三元组 `[nums[i], nums[j], nums[k]]`,使得 `i != j`、`i != k`、`j != k`,并且这三个数的和等于0。解决这个问题的一个有效方法是使用**排序**和**双指针**技术。首先,对数组进行排序,然后使用一个外层循环遍历数组,对于外层循环中选定的每个元素,使用两个指针分别指向当前元素后面的开始和数组的末尾,通过移动这两个指针来寻找和为0的三元组。
2025-06-24 21:59:55
786
原创 代码训练LeetCode(38)盛最多水的容器
这道题目其实是一个非常经典的问题,在算法中称为“盛最多水的容器”。给定一个数组 `height`,数组中的每个元素代表垂直线的高度,数组的索引表示垂直线的位置。我们需要找到两根线,这两根线与 x 轴形成的容器可以容纳最大量的水。一个直观的方法是使用双重循环枚举所有可能的线对,计算它们构成的容器的容积,然后找出最大值。但这种方法的时间复杂度是 O(n^2),对于较大的 n 来说效率不高。
2025-06-22 21:54:18
894
原创 代码训练LeetCode(37)两数之和
给定一个已经按非递减顺序排列的整数数组 `numbers`,我们需要找到两个数,它们的和正好等于给定的目标数 `target`。返回这两个数的下标(从1开始计数),确保第一个下标小于第二个下标。题目保证有唯一解,并且不允许重复使用相同的元素。
2025-06-22 21:51:42
794
原创 代码训练LeetCode(36)判断子序列
本题要求判断一个字符串 s 是否是另一个字符串 t 的子序列。子序列的定义是在不改变字符顺序的情况下,可以通过删除一些字符(或不删除)从 t 中得到 s。
2025-06-17 23:02:51
903
8
原创 代码训练LeetCode(35)验证回文串
我们需要判断一个给定的字符串 `s` 是否是回文串。一个字符串如果忽略大小写、只考虑字母和数字,并且前后读都一样,那么它就是回文串。
2025-06-17 23:01:48
346
1
原创 RFC4291-IPv6地址架构
本规范定义了 IPv6(互联网协议第 6 版)的编址架构。文档内容包括 IPv6 编址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和多播地址的定义,以及 IPv6 节点的必备地址。本文档替代了 RFC 3513《IPv6 编址架构》。
2025-06-15 15:24:48
1606
51
原创 代码训练LeetCode(34)文本左右对齐
这道题目要求我们将一组单词根据指定的宽度 `maxWidth` 进行左右对齐的排版。具体要求如下:- 每行尽可能多地放置单词,但不能超过 `maxWidth`。- 单词间的空格要尽量均匀分布。如果不能均匀分配,则左侧空格多于右侧。- 最后一行单词左对齐,单词间只有一个空格,右侧填充空格至 `maxWidth`。
2025-06-13 22:50:12
914
1
原创 代码训练LeetCode(33)字符串首次匹配
这个问题要求我们在一个字符串(haystack)中寻找另一个字符串(needle)的首次出现位置,并返回其索引。如果不存在,返回-1。这是一个经典的字符串搜索问题,常见于文本编辑器的查找功能中。
2025-06-13 22:46:27
1138
原创 代码训练LeetCode(32)Z字形变换
本题要求将给定的字符串 `s` 按照 `Z` 字形排列,并按行读取形成一个新的字符串。当 `numRows` 为 1 或者 `numRows` 大于等于字符串长度时,`Z` 字形排列实际上不会改变字符串顺序。这是一个常见的字符串处理问题,涉及到字符串的遍历和重新组织。
2025-06-12 21:42:08
717
1
原创 代码训练LeetCode(31)反转字符串中的单词
这个题目要求我们接收一个字符串 `s`,然后反转其中的单词顺序。需要特别注意的是:1. 单词是由非空格字符组成,单词之间可能有一个或多个空格分隔。2. 结果字符串中单词之间只能有一个空格,并且不能有前导空格和尾随空格。
2025-06-12 21:40:53
863
原创 代码训练LeetCode(30)最长公共前缀
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。
2025-06-11 20:44:20
283
2
原创 代码训练LeetCode(29)最后一个单词的长度
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。
2025-06-11 20:42:15
382
原创 代码训练LeetCode(28)罗马数字
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。
2025-06-10 21:55:52
910
原创 代码训练LeetCode(27)接雨水
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。
2025-06-10 21:54:50
1250
1
原创 代码训练LeetCode(26)分发糖果
这道题目要求是给一排孩子分配糖果,每个孩子至少要有一个糖果。如果一个孩子的评分比他相邻的孩子高,那么这个孩子需要得到比相邻孩子更多的糖果。我们的目标是计算出满足这些条件的情况下,需要的最少糖果数量。
2025-06-09 22:51:51
391
1
原创 代码训练LeetCode(25)加油站
这道题目要求是给一排孩子分配糖果,每个孩子至少要有一个糖果。如果一个孩子的评分比他相邻的孩子高,那么这个孩子需要得到比相邻孩子更多的糖果。我们的目标是计算出满足这些条件的情况下,需要的最少糖果数量。
2025-06-09 22:51:02
709
原创 代码训练LeetCode(24)数组乘积
本文探讨了LeetCode中数组乘积问题的解法。题目要求计算数组中每个元素除自身外其他元素的乘积,且不能使用除法。作者分析采用左右乘积数组的方法:先构建左积数组记录每个元素左侧所有元素的乘积,再构建右积数组记录右侧乘积,最后将两者相乘得到结果。通过优化,空间复杂度可降至O(1)。代码实现展示了如何先用输出数组存储左积,再利用变量动态计算右积进行优化。该解法时间复杂度为O(n),适用于大规模数据,体现了对数组操作的巧妙处理。
2025-06-05 22:39:34
1065
3
原创 代码训练LeetCode(23)随机访问元素
本文介绍了如何在O(1)时间复杂度下实现插入、删除和随机访问元素的数据结构。通过结合哈希表(快速查找)和动态数组(随机访问)的优势,构建了一个高效的RandomizedSet类。关键点在于:插入时将元素追加到数组末尾并记录索引;删除时用末尾元素覆盖目标位置并更新索引;随机访问直接通过数组下标实现。该方案满足所有操作的平均时间复杂度为O(1)的要求,适用于高频数据操作场景。
2025-06-05 22:38:00
1408
原创 代码训练LeetCode(22)研究者H指数
摘要: 本文探讨LeetCode上H指数问题的解法。H指数定义为研究者至少有h篇论文被引用h次以上。通过排序引用次数数组(如使用qsort),然后从后向前遍历寻找满足条件的最大h值。关键步骤包括排序(O(n log n))和单次遍历(O(n))。代码实现展示了具体逻辑,强调将实际问题抽象为算法的重要性,建议通过类似练习提升算法思维。适用于学术评价或数据分析场景。 (共146字)
2025-06-04 22:01:03
582
1
原创 代码训练LeetCode(21)跳跃游戏2
本文介绍了LeetCode中"跳跃游戏2"问题的贪心算法解决方案。该问题要求在给定数组中,从起点到终点的最小跳跃次数。通过维护当前跳跃边界和最远可达位置,遍历数组时动态更新这两个变量,并在到达边界时增加跳跃次数。该方法时间复杂度为O(n),空间复杂度O(1)。文章提供了C语言实现代码,并强调了贪心算法在解决这类优化问题中的有效性。掌握该算法有助于提升解决类似问题的能力。
2025-06-04 22:00:19
672
原创 代码训练LeetCode(20)跳跃游戏
本文介绍了LeetCode中"跳跃游戏"问题的贪心算法解决方案。通过维护一个maxReach变量记录当前可到达的最远位置,遍历数组时更新该值。若发现某位置无法到达则返回false,否则最终检查maxReach是否能覆盖数组末尾。该方法时间复杂度O(n),空间复杂度O(1),示例代码展示了C语言实现。该问题展现了贪心算法在局部最优选择带来全局最优的特性,适合处理类似的数组遍历问题。
2025-06-03 23:16:04
453
1
原创 代码训练LeetCode(19)轮转数组
摘要: 文章探讨了LeetCode轮转数组问题的三种解法:使用额外数组、多次反转和环状替换,重点分析了多次反转法的实现。该方法通过三次反转(整体、前k个、剩余部分)实现数组右旋k位,时间复杂度O(n),空间复杂度O(1)。代码示例展示了C语言实现,强调原地操作的高效性。总结指出该问题锻炼数组操作和算法设计能力,特别是原地算法的优化思路,对提升编程能力有重要意义。
2025-06-03 23:15:06
855
原创 RPM之(1)基础使用
本文介绍了Linux系统下RPM(Red Hat Package Manager)包管理器的基础使用和实践方法。主要内容包括: RPM的发展背景和核心特性,如依赖管理、数字签名验证、软件包数据库等。 RPM包的命名格式详解:name-version-release.architecture.rpm,以及特殊包类型说明。 常见RPM命令操作: 安装/升级/卸载软件包 查询包信息/文件列表 查看文件所属包 RPM包构建实践: 安装必要工具(rpmbuild等) 创建标准构建目录结构 使用脚本自动生成SPEC文件
2025-05-26 23:53:26
878
13
原创 C++之fmt库介绍和使用(3)
本文介绍了C++中fmt库的格式化语法,重点关注格式字符串的替换字段和格式说明符的用法。替换字段通过大括号{}包围,可以包含参数ID和格式说明符,用于指定参数的显示格式。格式说明符定义了字段宽度、对齐方式、填充字符、符号显示、精度等细节。文章详细说明了各种格式化选项的含义和使用场景,包括对齐、符号、填充、宽度、精度和类型等。此外,还介绍了不同类型(如整数、字符、字符串等)的格式化选项及其效果。通过这些语法规则,开发者可以灵活地控制输出的格式,满足不同的显示需求。
2025-05-23 21:40:28
1085
7
原创 C++之fmt库介绍和使用(2)
本文介绍了C++中fmt库的格式化API及其使用。fmt/format.h提供了丰富的格式化功能,包括字符串格式化、指针和枚举值的处理、数字分组、系统错误处理以及自定义内存分配器。文章详细讲解了fmt::format、fmt::ptr、fmt::underlying等实用函数,并展示了如何通过fmt::memory_buffer进行动态内存管理。此外,还介绍了如何通过'L'格式说明符实现区域设置相关的数字格式化,并支持自定义分配器以满足特定需求。fmt库以其高效、灵活的特性,成为C++中处理格式化的强大工具
2025-05-20 21:14:22
2163
39
原创 c++(6)function与成员函数
本文介绍了C++中的std::function及其与成员函数的使用。std::function是C++11引入的通用多态函数封装器,能够封装各种可调用对象(如普通函数、lambda表达式、仿函数、成员函数等),提供统一的调用接口,增强代码的灵活性和泛用性。通过std::function,不同类型的可调用对象可以用相同的方式调用,简化了代码设计。文章还探讨了std::function的实现原理,即通过类型擦除技术将不同类型的可调用对象抽象为统一的调用接口,并介绍了其与函数指针、lambda表达式、仿函数等的区
2025-05-18 20:47:31
948
9
原创 C++之fmt库介绍和使用(1)
本文介绍了C++中的fmt库,一个现代化的格式化库,旨在替代传统的iostream和printf方法。fmt库由Victor Zverovich开发,具有安全性、可扩展性、高性能、Unicode支持、快速编译、小二进制体积、可移植性和开源等特点。文章详细列举了fmt库的主要特性,并提供了性能对比数据,显示fmt库在速度和效率上优于其他常见格式化方法。此外,文章还介绍了fmt库的编译时间和代码膨胀测试结果,进一步证明了其高效性。通过简单的代码示例,展示了如何使用fmt库进行文本格式化输出。
2025-05-14 20:57:00
2544
50
原创 研发效率破局之道阅读总结(5)管理文化
《研发效率破局之道》第五部分探讨了管理文化在提升团队研发效能中的关键作用。文章指出,管理是提高团队效能的基石,而文化则是持久高效的保障。技术管理者的主要任务包括寻找目标、目标管理以及计划执行。目标管理应遵循SMART原则,并利用OKR工具进行目标对齐。在任务执行上,管理者需从人、流程和工具三方面入手,激发团队成员的主观能动性。文化建设方面,文章强调了文化作为潜规则的重要性,并提出了推动文化建设的三个要点:坚持行动、明确价值观和注意文化演进。
2025-05-10 22:55:18
1155
7
原创 研发效率破局之道阅读总结(4)个人效率
Author: Once Day Date: 2025年4月30日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…
2025-04-30 21:50:11
1874
35
原创 Linux之netlink(2)libnl使用介绍(1)
Author:Onceday Date:2025年4月26日漫漫长路,才刚刚开始…全系列文章可查看专栏:Linux内核知识_Once-Day的博客-CSDN博客libnl3是Linux平台上一个功能丰富的网络编程库。它为用户空间程序提供了一组全面的API,用于与Linux内核的网络组件进行交互。libnl3让开发者能够方便地配置和管理各种网络功能,如链路、接口、路由、地址、邻居、策略路由、流量控制、网络状态监控等。
2025-04-26 23:39:14
1396
7
原创 研发效率破局之道阅读总结(3)工程优化
蓝绿部署(Blue-green Deployment)、红黑部署(Red-black Deployment)和灰度发布(Gray Release ,或 Dark Launch)的定义和流程:(1)蓝绿部署,是采用两个分开的集群对软件版本进行升级的一种方式。它的部署模型中包括一 个蓝色集群 A 和一个绿色集群 B,在没有新版本上线的情况下,两个集群上运行的版本是 一致的,同时对外提供服务。首先,从负载均衡器列表中删除集群 A,让集群 B 单独提供服务。然后,在集群 A 上部署新版本。
2025-04-22 22:32:04
1636
40
Autotool Tutorial(epita.fr) - Autorools使用教程PDF文档
2023-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人