- 博客(178)
- 资源 (16)
- 收藏
- 关注

原创 使用Go语言实现线程安全的Map
自定义线程安全的SyncMap泛型支持:灵活适配不同类型的键值。线程安全:支持高并发场景的安全访问。可扩展性:易于添加更多功能,如合并操作、条件更新等。通过本文的实现与示例,希望您能更好地理解和应用线程安全Map,构建健壮的并发应用。
2024-11-25 23:24:23
800
1

原创 使用 Go 语言封装 MinIO 相关操作
MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API,广泛用于存储和管理海量数据。在实际开发中,封装一个便于使用的 MinIO 操作包,可以帮助我们简化操作逻辑,提高代码的可读性和复用性。初始化 MinIO 客户端上传文件下载文件列出文件删除文件获取文件的预签名 URL通过封装 MinIO 的常用操作,我们可以极大简化代码逻辑,提高开发效率。在实际项目中,可以根据需求进一步扩展功能,例如支持更多的操作、增加日志功能或通过配置文件动态加载参数等。
2024-11-24 22:06:26
1017

原创 Go语言开发的源代码行数统计工具
是一个开源工具,用于统计各种编程语言的源代码文件数量和代码行数。它支持多种语言,易于扩展以包括自定义语言。简单易用,可以帮助开发者快速了解代码库并跟踪变化。页面下载预编译的二进制文件。
2024-11-21 10:53:34
1237

原创 使用gRPC基于Protobuf传输大文件或数据流
在gRPC中,服务和消息的定义是通过.proto文件进行的。例如,定义一个文件传输服务,可以在这里定义了一个服务,包含了一个Upload方法,该方法接受一个FileChunk类型的流,并返回一个状态。
2024-05-10 14:02:34
2597

原创 极光推送Go语言服务端SDK
jpush-api-golang-client项目地址:https://github.com/Scorpio69t/jpush-api-golang-client概述JPush’s Golang client library for accessing JPush APIs. 极光推送的 Golang 版本服务器端 SDK。该项目参考ylywyn结合极光推送官方文档而来。(原项目年久失修,有很多新特性都没有提供,本项目旨在将其完善,方便大家使用,后续会持续更新,不足之处欢迎大家指正,谢谢~)参考R
2021-12-31 17:45:59
1181
6

原创 HackRF-AIS信号的采集与解调
目录AIS信号采集与解调1、硬件设备2、系统准备3、软件准备4、进行实验(需要去有船只经过的江边才能采集到信号,本次实验于重庆嘉陵江边进行)5、AIS信息解译AIS解调后数据源可去一下连接获取AIS信号采集与解调1、硬件设备 硬件设备采用HackRF One,HackRF是一款全开源的硬件项目,其目的主要是为了提供廉价的SDR(软件定义无线电)方案,作者Mike Ossmann在第一版HackRF Jawbreaker时通过Kickstart融资成功,之后Mike Ossmann开始进行了第二版Ha
2021-10-25 16:28:21
2186
4

原创 c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot
在许多嵌入式系统或计算平台中,可能不方便使用标准数学库函数。在本篇博客中,我们将使用 泰勒展开 来实现常见的三角函数:sin(x)、cos(x)、tan(x) 和 cot(x),而不依赖任何库函数。通过手动实现这些数学公式,我们可以更好地理解三角函数的计算原理,同时为那些受限的环境提供一种实现方案。泰勒展开是数学中一个非常重要的公式,它能够将任何在某点可导的函数展开为一个无限级数。对于三角函数,我们可以利用其在0点的泰勒级数展开来近似计算函数值。sinxx−x33!x55!−。
2020-03-23 22:57:08
4798
1
原创 【LeetCode】45. 跳跃游戏 II
摘要 本文介绍了解决跳跃游戏II问题的多种算法,重点分析了贪心算法的最优解。题目要求在给定数组中从起点出发,找到到达终点的最小跳跃次数。贪心算法通过维护当前边界和最远可达位置,在O(n)时间复杂度和O(1)空间复杂度内解决问题,优于动态规划(O(n²))和BFS搜索(O(n²))等其他方法。文章详细比较了各算法特点,并提供了贪心算法的核心实现代码,强调其在每一步选择能跳得最远位置的策略,确保跳跃次数最少。
2025-09-18 10:46:23
686
原创 【LeetCode】44. 通配符匹配
本文介绍了通配符匹配问题的动态规划解法。题目要求实现支持'?'和''的字符串匹配,其中'?'匹配单个字符,''匹配任意字符序列。核心算法采用二维DP表,状态转移分为三种情况:普通字符直接比较,'?'匹配任意字符,'*'匹配任意序列。通过示例和流程图详细说明了算法流程,并对比了递归回溯、记忆化递归、动态规划和滚动数组优化四种解法的时间/空间复杂度。文章还提供了关键优化技巧的代码实现,包括经典DP解法和空间优化的滚动数组版本,帮助读者理解这一字符串匹配问题的标准解法。
2025-09-18 10:41:34
578
原创 【LeetCode】41. 缺失的第一个正数
题目要求找出未排序整数数组中缺失的最小正整数,要求时间复杂度O(n)且空间复杂度O(1)。核心解法是原地哈希:遍历数组,将数字i放到索引i-1的位置,再遍历检查第一个不匹配的位置。若数组本身包含1~n,则返回n+1。示例:[1,2,0]返回3,[3,4,-1,1]返回2。关键优化包括交换策略和边界处理,确保高效性和正确性。
2025-09-17 21:58:23
492
原创 【LeetCode】40. 组合总和 II
排序去重:排序后可以方便地去重状态管理:合理管理递归状态和路径去重处理:避免生成重复的组合早期终止:发现无解立即返回空间优化:及时释放不需要的内存算法选择:根据数据规模选择合适的算法。
2025-09-17 20:02:07
629
原创 【LeetCode】39. 组合总和
本文探讨了如何解决组合总和问题,即从无重复元素的整数数组中找出所有和为给定目标值的组合。题目允许数字重复使用,要求返回所有不重复的组合。通过回溯算法(深度优先搜索)的核心思想,结合递归搜索、路径记录和剪枝优化等技术,可以有效解决该问题。文章比较了基础回溯、剪枝回溯和动态规划等算法的时间/空间复杂度,并提供了排序优化、早期终止等关键技巧的实现代码。典型示例展示了算法如何找到如[[2,2,3],[7]]这样的有效组合,同时分析了最坏情况下组合数不超过150个的特性。
2025-09-14 14:19:29
731
原创 【LeetCode】38. 外观数列
外观数列是一种递归定义的字符串序列,通过行程长度编码(RLE)生成。给定n,返回第n项。如n=4时输出"1211"。解题思路包括递归和迭代两种方法,核心是统计连续相同字符的个数和字符本身。优化技巧包括字符串构建优化、双指针技术、内存预分配和尾递归优化。时间复杂度O(n×m),空间复杂度优化后为O(m)。算法流程包括递归生成、字符串遍历和编码构建等步骤。
2025-09-14 14:17:11
1059
原创 【LeetCode】37. 解数独
本文介绍了解数独问题的回溯算法实现。数独解法需要满足行、列和3x3宫格内数字1-9不重复的约束条件。算法采用深度优先搜索结合回溯:依次尝试填充空格,遇到冲突时回溯并尝试其他数字。关键优化包括预处理空格位置、约束度计算优先填充约束最多的空格、位运算加速冲突检测等。时间复杂度为O(9^m)(m为空格数),空间复杂度O(m)。算法通过剪枝和优化搜索顺序提高效率,确保找到唯一解。提供的流程图详细展示了基础回溯、优化回溯和位运算优化的具体流程。
2025-09-13 11:49:38
315
原创 【LeetCode】36. 有效的数独
本文介绍了如何验证9×9数独的有效性。解题关键在于检查行、列和3×3宫格中数字的唯一性。提供了三种优化方案:三次遍历(分别验证行、列、宫格)、一次遍历(同时验证三种条件)和位运算优化(使用位掩码压缩空间)。所有算法的时间复杂度均为O(1),因为数独大小固定。重点在于高效计算宫格索引和冲突检测,其中位运算版本通过掩码操作实现最优空间利用。示例显示当左上角宫格出现重复数字"8"时数独无效。
2025-09-13 11:47:38
819
原创 【LeetCode】35. 搜索插入位置
摘要: 题目要求在有序无重复数组中查找目标值的插入位置,若存在则返回索引,否则返回按顺序插入的位置。解法需满足O(log n)时间复杂度,采用二分查找算法。关键点包括:使用半开区间[left, right)的二分模板,处理边界条件(空数组、首尾插入等),并提供多种实现方案(经典二分、右偏二分)及线性基线法用于对拍验证。测试用例覆盖基础、边界及极端情况,确保算法正确性。核心思路是寻找第一个≥target的位置,即标准lower_bound问题。
2025-09-12 13:58:15
844
原创 【LeetCode】33. 搜索旋转排序数组
搜索旋转排序数组 问题概述 给定一个升序排列且元素互不相同的数组,该数组在某个未知位置旋转后,要求设计O(log n)时间复杂度的算法查找目标值。例如,数组[4,5,6,7,0,1,2]中查找0应返回4。 核心解法:二分查找 关键思路:旋转数组可分成两个有序部分,通过比较中间元素与边界值确定有序区间 算法流程: 初始化左右指针 计算中间位置mid 若nums[mid]==target,直接返回 判断左半边是否有序: 若有序且target在范围内,搜索左半边 否则搜索右半边 复杂度:时间复杂度O(log n)
2025-09-12 13:56:42
802
原创 【LeetCode】31. 下一个排列
本文介绍了如何寻找整数数组的下一个字典序更大的排列。核心思路是通过三步操作:1)从右向左找到首个下降点i;2)在右侧找到大于nums[i]的最小元素j;3)交换i和j位置元素后反转i+1到末尾的子数组。若数组已完全降序,则直接反转整个数组得到最小字典序排列。该算法时间复杂度O(n),空间复杂度O(1),能正确处理含重复元素和边界情况。文章提供了详细示例、流程图、错误分析和测试用例,帮助理解这一经典排列问题。
2025-08-28 10:13:17
911
原创 【LeetCode】30. 串联所有单词的子串
摘要 本文详细解析了LeetCode 30题"串联所有单词的子串"的解法。该题要求在给定字符串s和等长单词数组words中,找到s中所有起始索引,使得从该索引起连续子串恰好是words中所有字符串的某种排列的串联。 文章首先明确了题目要求,强调了所有单词等长这一关键约束条件。然后分析了问题本质,提出两种典型解法:直接切分计数和多起点定长滑窗法,并通过可视化流程图展示了滑动窗口的工作原理。 重点介绍了最优解——多起点固定步长滑动窗口算法,包括其核心思想、伪代码和正确性要点。该算法通过从0.
2025-08-28 10:12:17
1137
原创 【LeetCode】29. 两数相除(Divide Two Integers)
本文探讨了如何在不使用乘法、除法和取余运算的情况下实现两数相除。主要思路是通过减法结合位运算(位移操作)来模拟除法过程。文章提出了两种高效解法:1)快倍增减法,通过指数加速减少减法次数;2)位移长除法,采用二进制逐位构造商。两种方法均需处理符号转换、32位整数溢出(特别是INT_MIN/-1的情况)和边界条件。代码实现使用Go语言,将中间变量转为int64避免溢出,并在最后对结果进行截断处理。验证表明,这些方法在时间复杂度(O(logN)或O(1))和正确性上均满足要求,适用于各种边界情况。
2025-08-28 09:49:33
519
原创 【LeetCode】28. 找出字符串中第一个匹配项的下标
这篇文章介绍了如何在一个字符串中查找另一个字符串首次出现的位置。题目要求给定两个字符串haystack和needle,在haystack中找出needle第一次出现的下标,若不存在则返回-1。文章详细讲解了几种解决方法: 暴力匹配法:逐个位置检查子串是否匹配,实现简单但效率较低 优化暴力匹配:在字符不匹配时提前退出,减少不必要的比较 KMP算法:通过构建部分匹配表(next数组)来优化匹配过程,避免主串指针回退 文章通过流程图和示例代码(Go语言)详细说明了每种算法的实现过程,特别对KMP算法的next数组
2025-08-28 09:48:24
851
原创 【LeetCode】LCP 26. 导航装置
题目摘要: LCP 26要求在二叉树的若干节点设置导航装置,使得每个节点的导航距离向量唯一。给定一个N节点的二叉树(2≤N≤50000),需找出最少装置数M,使所有节点到M个装置的距离组合互不相同。示例1中,在节点1、3或1、4设置2个装置即可;示例2只需在节点3或4设置1个装置。解题需考虑树结构特性,通过距离计算和唯一性验证,寻找最优解。核心挑战是平衡算法效率与最优性,避免组合爆炸问题。
2025-08-26 16:22:14
427
原创 【LeetCode】26. 删除有序数组中的重复项
文章摘要(150字) 题目要求对非严格递增数组原地删除重复项,保持元素相对顺序并返回新长度。核心解法是双指针法:慢指针slow标记唯一元素位置,快指针fast遍历数组。当nums[fast]≠nums[slow]时,将nums[fast]赋给nums[++slow]。优化版可跳过slow=fast时的冗余赋值。算法时间复杂度O(n),空间复杂度O(1)。示例[1,1,2]处理后为[1,2,_],返回长度2。需注意边界条件如空数组或全同元素数组。
2025-08-26 16:19:03
355
原创 【LeetCode】25. K 个一组翻转链表
本文介绍了K个一组翻转链表的算法。题目要求将链表每K个节点为一组进行翻转,不足K个的保持原序。主要解法包括: 迭代法:通过虚拟头节点辅助,分组检查并翻转,时间复杂度O(n),空间复杂度O(1) 递归法:采用分治策略,翻转当前组后递归处理剩余节点 优化迭代法:减少不必要的遍历 关键步骤包括: 确定分组边界 区间内节点翻转 重新连接翻转后的节点 处理边界情况(剩余不足K个) 算法复杂度均为O(n),其中迭代法空间更优。文中通过流程图详细展示了分组翻转和节点连接的过程,并比较了不同解法的优缺点。
2025-08-23 14:22:20
895
原创 【LeetCode】24. 两两交换链表中的节点
本文介绍了链表两两节点交换的三种解法:迭代法、递归法和优化迭代法。迭代法通过维护三个指针(prev、first、second)逐步交换相邻节点;递归法采用自底向上策略处理子问题;优化迭代法利用多重赋值简化代码。三种方法的时间复杂度均为O(n),空间复杂度分别为O(1)、O(n)和O(1)。关键点在于正确处理节点引用关系,确保链表不断裂,并注意边界条件如空链表或单节点情况。
2025-08-23 14:20:02
793
原创 【LeetCode】22. 括号生成
本文介绍了生成有效括号组合的三种方法:回溯剪枝、动态规划和卡塔兰数验证。回溯法通过约束左右括号的数量来生成所有有效解;动态规划利用"(A)B"的结构递归构造解;卡塔兰数则用于验证解的数量正确性。对于n=3的情况,输出包括((()))等5种组合。三种方法的时间复杂度均为O(Cn)(Cn为卡塔兰数),空间复杂度从O(n)到O(Cn)不等。文末提供了Go语言实现代码,展示了三种方法在n=1-4时的输出一致性验证。
2025-08-22 18:57:13
1137
原创 【LeetCode】21. 合并两个有序链表
摘要:本文介绍了合并两个有序链表的三种解法。推荐使用迭代-哨兵节点法(时间复杂度O(m+n),空间O(1)),通过比较节点值逐步连接较小节点。递归法代码简洁但空间复杂度较高(O(m+n))。文中提供了完整Go代码实现、测试用例及流程图解,演示了如何正确处理边界条件(空链表、负数、重复值等)并保持结果升序性。三种解法均通过测试验证,其中迭代法最优,适合实际应用。
2025-08-22 18:56:05
1035
原创 【LeetCode】19. 删除链表的倒数第 N 个结点
本文介绍了删除链表倒数第N个节点的三种解法,重点推荐双指针法。通过设置哑结点统一处理边界情况,快指针先走N步后,快慢指针同步移动,当快指针到尾时慢指针指向待删节点的前驱。代码实现包含链表构建和转换工具函数,并验证了三个示例(删除中间、尾部和头节点)。时间复杂度O(sz),空间复杂度O(1)。
2025-08-21 20:43:22
1029
原创 【LeetCode】18. 四数之和
本文介绍了求解"四数之和"问题的两种算法:排序+双指针法和通用的kSum递归法。双指针法通过三层循环固定两个数,用双指针在剩余区间搜索,时间复杂度O(n³)。kSum法则将问题抽象为递归框架,当k=2时使用双指针解决。两种方法都通过排序、去重和剪枝优化性能,并处理了大数溢出问题。文章提供了详细的流程图解和代码实现要点,包括去重逻辑、剪枝策略和long类型处理等关键细节。示例代码展示了两种解法的具体实现,帮助理解如何高效解决这类组合求和问题。
2025-08-21 20:41:53
904
原创 【LeetCode】17. 电话号码的字母组合
题目要求根据电话号码数字(2-9)生成所有可能的字母组合。采用回溯算法,通过递归枚举每个数字对应的字母,逐步构建组合。时间复杂度为O(4^n),空间复杂度O(n)。关键步骤包括:数字-字母映射、递归回溯生成组合、处理边界情况(如空输入)。示例输入"23"输出["ad","ae","af","bd","be","bf","cd","ce&qu
2025-08-19 22:15:41
1266
原创 【LeetCode】16. 最接近的三数之和
这道题要求从数组中找出三个数,使其和最接近目标值。核心解法是排序+双指针:先排序数组,然后固定一个数,用双指针寻找另外两个数,计算三数之和与目标的差值,不断更新最接近值。时间复杂度为O(n²),空间复杂度O(1)。关键优化包括跳过重复元素和剪枝处理。该算法适用于数值逼近、优化问题等场景,是经典的双指针应用范例。
2025-08-19 22:13:23
883
原创 【LeetCode】15. 三数之和
本文介绍了求解三数之和问题的两种方法。题目要求在给定整数数组中找到所有不重复的三元组,使其元素之和为零。推荐的方法是排序+双指针:先对数组排序,然后固定一个元素,使用双指针在剩余区间寻找两数之和的补数,同时通过跳过重复值来避免重复解。该方法时间复杂度为O(n²),空间复杂度为O(1)。另一种备选方法是排序后使用哈希集合辅助查找,但实现较复杂。文中提供了Go语言实现代码,包含详细注释和测试用例,特别强调了去重处理和边界条件的注意事项。
2025-08-18 15:47:09
426
原创 【LeetCode】14. 最长公共前缀
输入:strs = [“interspecies”,“interstellar”,“interstate”]:O(S × log m),其中S是所有字符串中字符数量的总和,m是字符串数组中的字符串的最小长度。:O(m log n),其中m是字符串数组中的字符串的平均长度,n是字符串的数量。输入:strs = [“flower”,“flow”,“flight”]输入:strs = [“dog”,“racecar”,“car”]:O(S),其中S是所有字符串中字符数量的总和。第0列: f,f,f ✓。
2025-08-18 15:13:42
459
原创 【LeetCode】13. 罗马数字转整数
本文介绍了将罗马数字转换为整数的算法,重点处理特殊减法规则(如IV=4、IX=9等)。通过从右向左遍历字符串,比较相邻字符值,当较小值位于较大值左侧时执行减法操作。算法采用O(n)时间复杂度和O(1)空间复杂度,提供多种解法对比,并包含流程图展示转换过程(如"MCMXCIV"转为1994)。关键优化包括遍历方向选择、数组映射替代哈希表,适用于时钟、章节编号等实际场景。
2025-08-17 21:54:27
901
原创 【LeetCode】12. 整数转罗马数字
本文介绍了将整数转换为罗马数字的算法,重点分析了贪心算法的实现过程。罗马数字转换遵循特定规则,包括基本符号对应关系(I=1,V=5等)、减法规则(如4=IV,9=IX)和重复限制(符号最多连续出现3次)。文章通过流程图展示了转换过程,对比了不同解法的优劣,推荐使用时间复杂度O(1)的贪心算法。该算法通过从大到小遍历预定义的符号值数组,逐步构建结果字符串。应用场景包括时钟显示、章节编号等。测试用例应覆盖基础功能、边界值(1-3999)和特殊规则(4/9相关转换)。
2025-08-17 21:53:14
1076
原创 【LeetCode】10. 正则表达式匹配
本文介绍了正则表达式匹配问题的动态规划解法。题目要求实现支持"."和""的正则匹配,其中"."匹配任意字符,""匹配零或多个前驱字符。通过二维DP表记录状态转移,处理字符匹配、星号处理和通配符三种情况。解法分析表明,动态规划方法时间复杂度为O(mn),空间复杂度可优化至O(n)。文章详细阐述了DP表构建过程、边界条件处理和优化策略,并对比了不同解法的优劣。该算法在文本处理、数据验证等场景有重要应用,通过合理设计测试用例可验证其正
2025-08-17 20:14:25
989
原创 【LeetCode】9. 回文数
本文介绍如何判断一个整数是否为回文数。回文数是指正序和倒序读相同的整数(如121)。解题思路包括数学反转法(推荐)和字符串双指针法。数学方法只反转数字后半部分,时间复杂度O(log n),空间O(1);字符串法直观但需要额外空间。关键优化点在于处理负数、零值和特殊边界条件,如以0结尾的非零数直接判否。文章通过流程图和复杂度分析对比了不同解法,并提供了测试用例设计建议,强调负数处理等核心边界条件。
2025-08-17 20:13:17
969
原创 【LeetCode】8. 字符串转换整数 (atoi)
本文详细介绍了字符串转整数(atoi)的实现方法。该算法需要处理前导空格、正负号识别、数字转换和溢出检查等步骤。通过状态机分析,描述了四种解法:状态机法、优化版本、正则表达式和位运算优化。文章用流程图展示了字符处理过程,并重点分析了溢出检查策略和边界情况处理。时间复杂度为O(n),空间复杂度为O(1),适用于配置文件解析、命令行参数处理等场景。关键优化点包括乘法前溢出检查、状态简化和减少字符串操作。
2025-08-17 07:57:40
1079
原创 【LeetCode】7. 整数反转
本文介绍了32位整数反转的算法实现,重点讲解了数学方法逐位提取数字和重组的过程。通过流程图分析了处理步骤,包括数字位提取、位序重排、结果重组及溢出检查等关键环节。特别强调了边界条件处理,如负数处理、零值判断和32位整数范围检查。比较了数学解法与字符串方法的优劣,指出数学方法在时空复杂度上更优(O(log n)时间,O(1)空间)。最后给出测试用例设计建议,包括基础功能验证和边界值测试。该算法适用于数字处理、密码学等场景,核心在于溢出检查优化和符号处理策略。
2025-08-17 07:56:41
719
原创 【LeetCode】6. Z 字形变换
文章摘要: Z字形变换问题要求将字符串按指定行数排列成Z形后逐行读取。核心解法包括模拟法、方向控制法和数学规律法,其中方向控制法通过动态调整行索引实现高效填充(时间复杂度O(n),空间复杂度O(n))。关键点在于处理边界条件(如行数为1或字符串长度≤行数时直接返回原字符串),并利用字符串构建器优化拼接效率。该算法适用于文本排版、加密等场景,需注意测试用例需覆盖基础功能、边界情况及性能极限。
2025-08-13 21:50:19
1119
LFS-BOOK-9.0 构建自己的Linux系统
2019-11-28
机器学习个人笔记完整版v5.4.docx
2020-05-18
PyQt-经典小游戏俄罗斯方块
2024-03-04
Python-100-Days
2019-07-15
C/C++学生成绩管理系统
2021-12-24
Learning WebRTC配套代码.zip
2019-06-25
基于Linux下数字签名技术的实现.pdf
2020-02-03
Python-100-Days.tar.gz(更新,完整版)
2019-11-27
Python编程无师自通-专业程序员的养成.zip
2019-04-30
PYTHON 网络爬虫实战
2019-07-09
微信小程序:开发入门及案例详解.zip
2019-07-04
Linux Bash编程与脚本应用实战
2019-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人