十年代码训练
文章平均质量分 87
台上一分钟,台下十年功,练习10年,只为灿烂那刻。
Once-Day
软件工程师,编程爱好者,技术博客创作者,专注于嵌入式Linux C/C++领域,擅长高性能编程和疑难问题定位。二年MCU软件开发(智能小车),四年Linux软件开发(网关防火墙)。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CS自学(5)代码训练
作为一名以 C/C++ 为主要工具的程序开发者,高效刷题的核心并不在于“做了多少题”,而在于是否形成稳定、可迁移的解题能力。结合算法学习中的认知规律与工程实践经验,基于遗忘曲线来规划刷题节奏,是一种兼顾效率与深度的可行路径。原创 2026-01-27 14:40:11 · 829 阅读 · 2 评论 -
代码训练LeetCode(49)插入区间
本文介绍了在有序区间列表中插入新区间并合并重叠区间的算法。给定一个按起始端点排序的区间列表和一个新区间,要求在插入后保持区间有序且无重叠。分析表明,可通过一次遍历实现:先处理左侧不重叠区间,再合并重叠区间,最后处理右侧区间。代码实现中使用了动态数组存储结果,时间复杂度为O(n),空间复杂度为O(n)。关键点在于利用区间已排序的特性优化合并过程,确保高效处理大规模数据。该算法适用于需要动态维护有序非重叠区间的场景,如日程安排、资源分配等问题。原创 2025-10-26 20:03:46 · 624 阅读 · 1 评论 -
代码训练LeetCode(48)字母异位词分组
摘要:本文介绍了如何将字符串数组中的字母异位词分组的问题。通过使用哈希表存储排序后的字符串作为键,原始字符串列表作为值,实现了高效的分组。文章详细分析了解题思路和复杂度(时间复杂度O(nk log k),空间复杂度O(nk)),并提供了C语言实现代码。该方法适用于处理包含小写字母的字符串数组,能够有效地将字母异位词归为一组输出。通过此类练习,可以提升对哈希表和字符串处理的应用能力。原创 2025-10-25 19:54:00 · 586 阅读 · 2 评论 -
代码训练LeetCode(47)生命游戏
这篇文章介绍了如何实现康威的“生命游戏”算法。生命游戏是一个二维细胞自动机,每个细胞的生死由周围8个邻居的状态决定。作者通过分析问题,提出创建辅助数组来存储中间状态,避免直接修改原数组影响后续判断。代码实现包括复制原始状态、遍历每个细胞计算活邻居数、应用生存规则更新状态。这种方法保证了状态更新的同步性,同时兼顾了空间效率。该问题训练了多维数组操作和复杂逻辑实现能力,是提升编程技巧的经典案例。原创 2025-08-10 18:43:26 · 1283 阅读 · 9 评论 -
Libevent(5)之使用教程(4)工具
Author: Once Day Date: 2025年8月3日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…原创 2025-08-03 12:14:37 · 2067 阅读 · 37 评论 -
Libevent(4)之使用教程(3)配置
本文介绍了Libevent事件库中事件配置的基本概念和使用方法。主要内容包括: 事件的生命周期:从初始化、待处理到活跃状态的转换过程,以及持久化事件的特性。 事件构造:使用event_new()函数创建事件对象,需要指定事件基础、文件描述符、触发标志、回调函数和参数。 事件标志:详细说明了EV_TIMEOUT、EV_READ、EV_WRITE等标志的作用和使用场景。 持久化事件:解释了EV_PERSIST标志如何使事件在触发后保持待处理状态,以及超时重置机制。 回调参数传递:介绍如何使用event_self原创 2025-07-27 15:39:32 · 1819 阅读 · 32 评论 -
Libevent(3)之使用教程(2)创建事件
本文介绍了Libevent库中event_base的创建和配置方法。主要内容包括:使用event_base_new()创建默认event_base;通过event_config结构体进行更精确的配置,包括禁用特定后端方法、设置功能要求和运行时标志;以及多CPU环境下的优化提示。文章详细说明了各种配置选项的含义和使用场景,并指出配置不满足时可能返回NULL的情况。这些内容为使用Libevent进行高效网络编程提供了基础支持。原创 2025-07-19 14:59:13 · 2034 阅读 · 25 评论 -
代码训练LeetCode(46)旋转图像
摘要: 本文探讨了LeetCode矩阵置零问题,要求将矩阵中0元素所在行列全部置零,且需原地操作。分析采用两次遍历策略:首次标记需置零的行列,第二次执行置零操作。示例代码使用两个一维数组存储标记,空间复杂度O(m+n),时间复杂度O(m*n)。该方案在限制条件下实现高效处理,适用于类似矩阵操作场景,强调优化空间使用的重要性。原创 2025-07-12 22:01:00 · 546 阅读 · 5 评论 -
代码训练LeetCode(45)旋转图像
摘要: 本文探讨了如何原地旋转n×n矩阵90度的问题。通过分析旋转规律,提出先转置矩阵再反转每行的解决方案。以3×3矩阵为例展示了操作步骤,最终实现的空间复杂度为O(1),时间复杂度为O(n²)。代码通过双重循环完成转置和行反转操作,强调了对矩阵操作的理解和原地修改技巧的重要性。这类问题有助于提升对数组处理能力和编程技巧的掌握。原创 2025-07-12 21:59:35 · 467 阅读 · 1 评论 -
代码训练LeetCode(44)螺旋矩阵
这个问题考察了对矩阵的遍历操作,特别是在不同的遍历顺序下如何有效处理边界条件。通过这种类型的问题,可以加强对数组操作和循环控制的理解。为了提升编程能力,建议多练习类似的矩阵操作问题,这有助于提高对多维数组处理的熟练度和对循环控制逻辑的把握。原创 2025-07-02 21:59:32 · 795 阅读 · 5 评论 -
代码训练LeetCode(43)有效的数独
这个题目考察了数组的使用、布尔逻辑及简单的算法思维。通过这类问题,可以增强对基本数据结构的理解和操作能力。要提升编程能力,建议多练习类似的逻辑判断和数组操作题目,以锻炼思维和编程技巧。原创 2025-07-02 21:58:14 · 1119 阅读 · 2 评论 -
代码训练LeetCode(42)串联所有单词的子串
题目要求我们找出所有可能的“串联子串”的起始索引。这些串联子串是由给定数组 `words` 中的所有字符串以任意顺序排列连接形成的。所有 `words` 中的字符串长度都是相同的。原创 2025-06-28 12:38:17 · 1050 阅读 · 8 评论 -
代码训练LeetCode(41)无重复字符的最长子串
这个题目要求我们找出给定字符串中最长的不含重复字符的子串,并返回这个子串的长度。字符串可能由英文字母、数字、符号和空格组成。为了解决这个问题,我们可以使用滑动窗口的方法。滑动窗口是一种可以将嵌套的循环问题转换为单循环问题,从而降低时间复杂度的技术。具体到这个问题,我们可以定义两个指针,一个指向子串的开始位置,另一个随着遍历逐步向后移动,从而形成一个窗口。我们还需要一个数据结构来存储窗口内的字符,以快速判断字符是否重复,通常使用哈希表实现。原创 2025-06-28 12:37:24 · 702 阅读 · 3 评论 -
代码训练LeetCode(40)长度最小的子数组
这个问题要求我们在一个由正整数构成的数组中找到总和大于等于给定值 `target` 的最短子数组,并返回这个子数组的长度。如果没有这样的子数组,我们需要返回0。我们可以使用**滑动窗口**的方法来解决这个问题。滑动窗口是一种用于处理数组/列表中元素的连续问题的有效方法。基本思想是,保持两个指针,表示当前的窗口的开始和结束位置,并根据当前窗口的值来调整指针,直到找到满足条件的窗口。原创 2025-06-24 22:01:03 · 538 阅读 · 2 评论 -
代码训练LeetCode(39)三数之和
题目要求在一个整数数组 `nums` 中找出所有唯一的三元组 `[nums[i], nums[j], nums[k]]`,使得 `i != j`、`i != k`、`j != k`,并且这三个数的和等于0。解决这个问题的一个有效方法是使用**排序**和**双指针**技术。首先,对数组进行排序,然后使用一个外层循环遍历数组,对于外层循环中选定的每个元素,使用两个指针分别指向当前元素后面的开始和数组的末尾,通过移动这两个指针来寻找和为0的三元组。原创 2025-06-24 21:59:55 · 991 阅读 · 0 评论 -
代码训练LeetCode(38)盛最多水的容器
这道题目其实是一个非常经典的问题,在算法中称为“盛最多水的容器”。给定一个数组 `height`,数组中的每个元素代表垂直线的高度,数组的索引表示垂直线的位置。我们需要找到两根线,这两根线与 x 轴形成的容器可以容纳最大量的水。一个直观的方法是使用双重循环枚举所有可能的线对,计算它们构成的容器的容积,然后找出最大值。但这种方法的时间复杂度是 O(n^2),对于较大的 n 来说效率不高。原创 2025-06-22 21:54:18 · 1096 阅读 · 0 评论 -
代码训练LeetCode(37)两数之和
给定一个已经按非递减顺序排列的整数数组 `numbers`,我们需要找到两个数,它们的和正好等于给定的目标数 `target`。返回这两个数的下标(从1开始计数),确保第一个下标小于第二个下标。题目保证有唯一解,并且不允许重复使用相同的元素。原创 2025-06-22 21:51:42 · 1037 阅读 · 0 评论 -
代码训练LeetCode(36)判断子序列
本题要求判断一个字符串 s 是否是另一个字符串 t 的子序列。子序列的定义是在不改变字符顺序的情况下,可以通过删除一些字符(或不删除)从 t 中得到 s。原创 2025-06-17 23:02:51 · 1105 阅读 · 8 评论 -
代码训练LeetCode(35)验证回文串
我们需要判断一个给定的字符串 `s` 是否是回文串。一个字符串如果忽略大小写、只考虑字母和数字,并且前后读都一样,那么它就是回文串。原创 2025-06-17 23:01:48 · 476 阅读 · 1 评论 -
代码训练LeetCode(34)文本左右对齐
这道题目要求我们将一组单词根据指定的宽度 `maxWidth` 进行左右对齐的排版。具体要求如下:- 每行尽可能多地放置单词,但不能超过 `maxWidth`。- 单词间的空格要尽量均匀分布。如果不能均匀分配,则左侧空格多于右侧。- 最后一行单词左对齐,单词间只有一个空格,右侧填充空格至 `maxWidth`。原创 2025-06-13 22:50:12 · 1107 阅读 · 0 评论 -
代码训练LeetCode(33)字符串首次匹配
这个问题要求我们在一个字符串(haystack)中寻找另一个字符串(needle)的首次出现位置,并返回其索引。如果不存在,返回-1。这是一个经典的字符串搜索问题,常见于文本编辑器的查找功能中。原创 2025-06-13 22:46:27 · 1310 阅读 · 0 评论 -
代码训练LeetCode(32)Z字形变换
本题要求将给定的字符串 `s` 按照 `Z` 字形排列,并按行读取形成一个新的字符串。当 `numRows` 为 1 或者 `numRows` 大于等于字符串长度时,`Z` 字形排列实际上不会改变字符串顺序。这是一个常见的字符串处理问题,涉及到字符串的遍历和重新组织。原创 2025-06-12 21:42:08 · 824 阅读 · 0 评论 -
代码训练LeetCode(31)反转字符串中的单词
这个题目要求我们接收一个字符串 `s`,然后反转其中的单词顺序。需要特别注意的是:1. 单词是由非空格字符组成,单词之间可能有一个或多个空格分隔。2. 结果字符串中单词之间只能有一个空格,并且不能有前导空格和尾随空格。原创 2025-06-12 21:40:53 · 1000 阅读 · 0 评论 -
代码训练LeetCode(30)最长公共前缀
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。原创 2025-06-11 20:44:20 · 368 阅读 · 1 评论 -
代码训练LeetCode(29)最后一个单词的长度
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。原创 2025-06-11 20:42:15 · 490 阅读 · 0 评论 -
代码训练LeetCode(28)罗马数字
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。原创 2025-06-10 21:55:52 · 1049 阅读 · 0 评论 -
代码训练LeetCode(27)接雨水
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。原创 2025-06-10 21:54:50 · 1344 阅读 · 0 评论 -
代码训练LeetCode(26)分发糖果
这道题目要求是给一排孩子分配糖果,每个孩子至少要有一个糖果。如果一个孩子的评分比他相邻的孩子高,那么这个孩子需要得到比相邻孩子更多的糖果。我们的目标是计算出满足这些条件的情况下,需要的最少糖果数量。原创 2025-06-09 22:51:51 · 520 阅读 · 0 评论 -
代码训练LeetCode(25)加油站
这道题目要求是给一排孩子分配糖果,每个孩子至少要有一个糖果。如果一个孩子的评分比他相邻的孩子高,那么这个孩子需要得到比相邻孩子更多的糖果。我们的目标是计算出满足这些条件的情况下,需要的最少糖果数量。原创 2025-06-09 22:51:02 · 846 阅读 · 0 评论 -
代码训练LeetCode(24)数组乘积
本文探讨了LeetCode中数组乘积问题的解法。题目要求计算数组中每个元素除自身外其他元素的乘积,且不能使用除法。作者分析采用左右乘积数组的方法:先构建左积数组记录每个元素左侧所有元素的乘积,再构建右积数组记录右侧乘积,最后将两者相乘得到结果。通过优化,空间复杂度可降至O(1)。代码实现展示了如何先用输出数组存储左积,再利用变量动态计算右积进行优化。该解法时间复杂度为O(n),适用于大规模数据,体现了对数组操作的巧妙处理。原创 2025-06-05 22:39:34 · 1192 阅读 · 2 评论 -
代码训练LeetCode(23)随机访问元素
本文介绍了如何在O(1)时间复杂度下实现插入、删除和随机访问元素的数据结构。通过结合哈希表(快速查找)和动态数组(随机访问)的优势,构建了一个高效的RandomizedSet类。关键点在于:插入时将元素追加到数组末尾并记录索引;删除时用末尾元素覆盖目标位置并更新索引;随机访问直接通过数组下标实现。该方案满足所有操作的平均时间复杂度为O(1)的要求,适用于高频数据操作场景。原创 2025-06-05 22:38:00 · 1515 阅读 · 0 评论 -
代码训练LeetCode(22)研究者H指数
摘要: 本文探讨LeetCode上H指数问题的解法。H指数定义为研究者至少有h篇论文被引用h次以上。通过排序引用次数数组(如使用qsort),然后从后向前遍历寻找满足条件的最大h值。关键步骤包括排序(O(n log n))和单次遍历(O(n))。代码实现展示了具体逻辑,强调将实际问题抽象为算法的重要性,建议通过类似练习提升算法思维。适用于学术评价或数据分析场景。 (共146字)原创 2025-06-04 22:01:03 · 721 阅读 · 0 评论 -
代码训练LeetCode(21)跳跃游戏2
本文介绍了LeetCode中"跳跃游戏2"问题的贪心算法解决方案。该问题要求在给定数组中,从起点到终点的最小跳跃次数。通过维护当前跳跃边界和最远可达位置,遍历数组时动态更新这两个变量,并在到达边界时增加跳跃次数。该方法时间复杂度为O(n),空间复杂度O(1)。文章提供了C语言实现代码,并强调了贪心算法在解决这类优化问题中的有效性。掌握该算法有助于提升解决类似问题的能力。原创 2025-06-04 22:00:19 · 822 阅读 · 0 评论 -
代码训练LeetCode(20)跳跃游戏
本文介绍了LeetCode中"跳跃游戏"问题的贪心算法解决方案。通过维护一个maxReach变量记录当前可到达的最远位置,遍历数组时更新该值。若发现某位置无法到达则返回false,否则最终检查maxReach是否能覆盖数组末尾。该方法时间复杂度O(n),空间复杂度O(1),示例代码展示了C语言实现。该问题展现了贪心算法在局部最优选择带来全局最优的特性,适合处理类似的数组遍历问题。原创 2025-06-03 23:16:04 · 568 阅读 · 0 评论 -
代码训练LeetCode(19)轮转数组
摘要: 文章探讨了LeetCode轮转数组问题的三种解法:使用额外数组、多次反转和环状替换,重点分析了多次反转法的实现。该方法通过三次反转(整体、前k个、剩余部分)实现数组右旋k位,时间复杂度O(n),空间复杂度O(1)。代码示例展示了C语言实现,强调原地操作的高效性。总结指出该问题锻炼数组操作和算法设计能力,特别是原地算法的优化思路,对提升编程能力有重要意义。原创 2025-06-03 23:15:06 · 972 阅读 · 0 评论 -
代码训练LeetCode(18)多数元素
对编程能力的考查主要集中在对数组操作的理解和算法效率的优化上。通过此题,可以加深对线性时间算法设计的理解,尤其是摩尔投票算法的巧妙之处。原创 2024-09-13 23:37:25 · 1389 阅读 · 21 评论 -
代码训练LeetCode(17)存在重复元素
本题主要考查对数组遍历和哈希表的应用能力。通过使用哈希表存储元素的最新索引,我们能够有效检查是否有符合条件的索引对。这种方法利用了哈希表快速查找和插入的特性,使得时间复杂度控制在 O(n) 内,适合处理大规模数据。原创 2024-05-07 23:18:08 · 1510 阅读 · 11 评论 -
代码训练LeetCode(16)只出现一次的数字
此题主要考查候选人对位运算的理解及应用,尤其是异或运算的性质。掌握这类技巧可以有效解决数组和数字相关的问题,且有助于提高代码的效率和性能。原创 2024-05-01 21:28:29 · 895 阅读 · 9 评论 -
代码训练LeetCode(15)买卖股票
这个问题考察了对数组遍历和简单逻辑判断的应用,以及如何从实际问题中抽象出有效的解决方案。通过这种问题,可以加强对简单贪心算法的理解和应用。原创 2024-04-22 22:52:12 · 3336 阅读 · 61 评论 -
代码训练LeetCode(14)整数反转
这个任务是一个数字处理问题,我们要把一个32位有符号整数中的数字翻转过来,并且要注意处理溢出的情况。如果翻转后的整数超过了给定的32位有符号整数范围,就返回0。原创 2024-04-13 18:38:22 · 1294 阅读 · 6 评论
分享