
算法/数据结构
文章平均质量分 65
等风来不如迎风去
AI领域初学者,AI+实时语音,AI+2/3D动画生成;AI+UE表演,AI+游戏NPC;音视频行业深耕多年,熟悉会议、直播、RTC,对在线教育、娱乐秀场等音视频端到端技术及系统架构有深入研究
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】动态规划:python实现 2
本文展示了5种动态规划算法的Python实现:1) 0-1背包问题求解最大价值;2) 网格中机器人的不同路径数计算;3) 网格最小路径和计算;4) 删除特定元素获得最大点数;5) 三角形最短路径求解。所有算法都采用二维DP表存储中间结果,通过填表方式自底向上或自顶向下递推,最终返回最优解。代码简洁明了,展示了动态规划解决不同类型问题的典型模式。原创 2025-07-02 23:17:25 · 389 阅读 · 0 评论 -
【算法】动态规划 矩阵:120. 三角形最小路径和
本文介绍了如何计算三角形最小路径和的问题。题目要求从三角形顶点出发,每步只能移动到下一行的相邻位置,最终找到一条使路径上数字之和最小的路线。 核心思路是采用自底向上的动态规划方法: 初始化dp数组为三角形最后一行 从倒数第二行开始逐层向上计算 对于每一层的每个位置,取下方两个相邻位置的最小值加上当前值 最终dp[0]即为最小路径和 这种方法只需要O(n)的额外空间,时间复杂度为O(n²)。文章提供了清晰的算法解释,并给出了C++和Python的实现代码,帮助读者理解如何高效解决此类动态规划问题。原创 2025-07-02 23:15:14 · 882 阅读 · 0 评论 -
【算法】动态规划 矩阵: 64. 最小路径和
题目描述:给定一个m×n的网格grid,其中每个格子包含非负整数。从左上角出发,每次只能向右或向下移动一步,求到达右下角时的最小路径和(即路径上所有数字之和的最小值)。 解题思路:采用动态规划方法,创建一个相同大小的dp表,其中dp[i][j]表示到达(i,j)格子的最小路径和。初始化起点和边界值后,通过状态转移方程dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]逐步填表。最终右下角的值即为所求的最小路径和。 代码实现:提供了C++和Python两种语言原创 2025-07-02 22:48:35 · 930 阅读 · 0 评论 -
【算法】动态规划 矩阵 :62. 不同路径
这篇文章介绍了机器人从网格左上角移动到右下角的不同路径数问题。通过动态规划方法,将问题转化为格子路径计数,提出状态转移方程:每个格子的路径数等于上方和左方格子的路径数之和。为优化空间复杂度,使用滚动数组将二维数组压缩为一维数组(O(n)空间)。文章以3×3网格为例详细演示了填表过程,并提供了C++和Python两种实现代码,均采用O(mn)时间和O(n)空间复杂度。关键思路是:初始化第一行为1,迭代计算时每个位置的值等于当前值(来自上方)加上左侧值。原创 2025-07-01 22:50:32 · 713 阅读 · 0 评论 -
【算法】动态规划 斐波那契类型: 740. 删除并获得点数
这篇文章分析了LeetCode 740题"删除并获得点数"的解法。主要思路是将问题转化为类似"打家劫舍"的动态规划问题。 文章首先解释了问题本质:选择某个数字会获得其总点数,但必须删除相邻数字。这相当于不能同时选择值相邻的数字。 解决方案分为三步: 统计每个数字的总价值(数字×出现次数) 使用动态规划,状态转移方程为dp[i] = max(dp[i-1], dp[i-2]+sum[i]) 返回最终结果 文章提供了Python和C++两种实现,并展示了示例验证过程。特别原创 2025-07-01 22:34:08 · 617 阅读 · 0 评论 -
【算法】动态规划:python实现 1
【算法】动态规划:python实现 1原创 2025-07-01 22:27:03 · 229 阅读 · 0 评论 -
【算法】动态规划 斐波那契类型: 198. 打家劫舍
摘要: 「打家劫舍」问题要求在不触发相邻房屋警报的情况下,计算一夜可偷窃的最高金额。采用动态规划解决,定义 dp[i] 表示前 i+1 间房屋的最高金额,状态转移方程为 dp[i] = max(dp[i-1], dp[i-2] + nums[i])。提供两种实现: O(n) 空间:用数组存储中间结果,适用于直观理解。 O(1) 空间:用滚动变量优化空间,仅需维护前两个状态。 例如,[2,7,9,3,1] 的最优解为 12(偷第 1、3、5 间)。两种方法均高效,推荐空间敏感场景使用滚动变量版本。原创 2025-06-30 23:27:08 · 737 阅读 · 0 评论 -
【算法】动态规划 斐波那契类型:746. 使用最小花费爬楼梯
这道题要求计算爬楼梯的最小花费,每次可以选择爬1或2阶,起始点可选0或1阶。采用动态规划,定义dp[i]为到达第i阶的最小花费,状态转移方程为dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])。初始条件为dp[0]=dp[1]=0。最终答案为dp[n],其中n为cost数组长度。可通过O(n)时间+O(n)空间或优化为O(1)空间实现。例如,cost=[10,15,20]时,最小花费为15;cost=[1,100,1,1,1,100,1,1,100,1]时,最原创 2025-06-30 23:17:26 · 812 阅读 · 0 评论 -
【算法】动态规划 斐波那契类型:1137. 第 N 个泰波那契数
摘要 本文介绍了计算第n个泰波那契数的两种方法。泰波那契数列定义为T₀=0, T₁=1, T₂=1, Tₙ=Tₙ₋₁+Tₙ₋₂+Tₙ₋原创 2025-06-30 22:07:41 · 449 阅读 · 0 评论 -
【算法】509. 斐波那契数
本文介绍了斐波那契数列的计算方法。斐波那契数定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>1)。给出了两种实现方案:1)迭代法通过滚动变量在O(n)时间、O(1)空间内完成计算;2)递归加备忘录法虽然时间复杂度也为O(n),但需要额外空间存储中间结果。对于n≤30的情况,推荐使用更高效的迭代法。代码示例包括C++和Python两种语言的实现。原创 2025-06-30 21:51:57 · 386 阅读 · 0 评论 -
【算法】斐波那契类型 动态规划 70: 爬楼梯
摘要:本文探讨了经典的爬楼梯问题,要求计算到达n阶楼梯的不同方法数(每次可爬1或2阶)。通过动态规划分析,得出状态转移方程dp[i] = dp[i-1] + dp[i-2]。提供了两种解法:最优的滚动数组法(O(1)空间)和递归加备忘录法(O(n)空间)。示例验证了n=2时输出2,n=3时输出3。两种方法均能高效解决问题,适合1≤n≤45的输入范围。原创 2025-06-30 21:47:39 · 370 阅读 · 0 评论 -
【C++】剑指 Offer 22. 链表中倒数第k个节点 (-)
地址一次性通过但可以看到内存肯定耗费比较多,因为我额外搞个一个vector 存指针。我的代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNod..原创 2022-05-18 10:33:10 · 267 阅读 · 0 评论 -
【C++】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 (-)
加了保护还报错难道是因为输入了 空的,导致异常?加了[] 判断【1,3,5】 过不了就加上这个break 就都ok了。这是因为 在后面j 位置,拿到了一个奇数,这个时候需要在j之前,遍历到一个偶数,位置i,二者对调。当j 发现遍历过来的i 跟自己一样了,就如同[1,3,5],i和j都是2了,说明了啥,说明j 前面都是奇数,没有偶数啊。这个时候就直接break掉内层的while ,然后break掉外层的while,退出执行。如果不加找不到就break掉外层的这个逻辑,会有.原创 2022-05-18 00:46:00 · 248 阅读 · 0 评论 -
【C++】剑指 Offer 18. 删除链表的节点
1 应该难点在待删除的结点的前一个结点如何保存?通过独立的变量prev保存2 头尾结点要注意刚好是头结点单独搞了一个判断3 结束条件:while p ,p 是当前那个我出错的地方: p->next 为空,说明是最后一个,我break了那么当前结点就得不到判断了。竟然么有删掉?找到问题了保存prev的时候,用了已经后移的p赋值应该先保存prev,然后,移动p但还有错误:如果待删除是最后一个,删不掉:原来是之前思路不清晰的时候,加的最后一个结点的判断..原创 2022-05-17 22:49:38 · 296 阅读 · 0 评论 -
【C++】剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数原创 2022-05-16 01:07:06 · 977 阅读 · 0 评论 -
【c++】剑指 Offer 11. 旋转数组的最小数字 二分查找(待续)
我的解法比较low大神们分析的头头是道,直接二分法查找这种旋转数组是分为两部分的只需要去掉尾部含有的连续的相同的元素就可以适用二分查找法查找的是个啥呢?应该是中间那个最小值的位置随想大神分析的依旧很到位0189.旋转数组.md给出了跟我类似的low解法和二分法知乎掘金林小鹿 大神的图神了剑指 Offer 11. 旋转数组的最小数字为了便于分析,我们先将数组中的数画在二维坐标系中,横坐标表示数组下标,纵坐标表示数组数值,我们发现除了最后水平的一段(黄..原创 2022-05-15 23:46:30 · 257 阅读 · 0 评论 -
【C++】剑指 Offer 11. 旋转数组的最小数字
我的这种解法是不登大雅之谈堂的。数据量大,那么效率就低。而且还要处理 一个元素这种特例。文内详述。知乎上有位大神也是跟我一样的思路方程式实验中学他解释的比我好:既然是旋转的,那么数组的是数值规则应该是:递增+最小值+递增,最大值和最小值紧挨着,所以只要看哪里不是递增的就知道最小值在哪。代码如下:public class MinArray { public static int minArray(int[] numbers) { //min默认初始值就是第一个..原创 2022-05-15 23:38:29 · 206 阅读 · 0 评论 -
【C++】剑指 Offer 10- II. 青蛙跳台阶问题
0070.爬楼梯.md这位大神解释的思路,已经很到位了。大神,这就是斐波那契数列如图, 大神自己推导的思路是n 楼梯的方法数目是由n-1 和n -2 楼梯方法数目之和。自己列举了一下,果然是这样的规律:大神对于dp[0] 说不考虑,但是我看不考虑会报错:dp【0】=1class Solution {public: int numWays(int n) { int dp[101]; dp[0] = 1; dp[1..原创 2022-05-14 23:58:37 · 248 阅读 · 0 评论 -
【C++】剑指 Offer 10- I. 斐波那契数列
剑指Offer10-I.斐波那契数列 大神的讲解:取余Tips : 设正整数x, y, z ,有取余公式:(x + y) % z = (x % z + y % z) % z按照题意递归写,直接超出时间限制求f(n)就是分别求f(n-1)和f(n-2),然后递归执行下去class Solution {public: int fib(int n) { if(n == 0) { return 0; ..原创 2022-05-14 17:16:38 · 292 阅读 · 0 评论 -
【C++】剑指 Offer 06. 从尾到头打印链表
由于前面两个题目是stack的所以感觉找到帮手了,结果还是出错了。基础不牢啊。出错了感觉这个是最简单的吧,结果还是出错了链表的第一个元素竟然么有出来又错了,header->next 可能是空指针的又错了,这下少了最后一个输入的终于该对了,代码比之前都简单直接用指针p挨个指向单链表的每个结点p 就拿到 next 的值就可以逐个向下p 为null ,就是列表遍历结束了,此时p是租后一个结点的next域了。/** * Definition..原创 2022-05-14 14:13:57 · 278 阅读 · 0 评论 -
【C++】剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格大神分析在网络编程中,如果URL参数中含有特殊字符,如空格、'#‘等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%‘后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如’#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入原创 2022-05-14 13:49:11 · 266 阅读 · 0 评论 -
【C++】剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/solution/mian-shi-ti-03-shu-zu-zhong-zhong-fu-de-shu-zi-b-4/官方的HashSet 是java的看起来跟我的思路是一样的,只是我用map代替了hashsetstd map 的遍历方法内存耗费较大,耗时比较多这里一定要返回int所以搞了一原创 2022-05-14 09:20:14 · 213 阅读 · 0 评论 -
【C++】剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈题目不是说没有元素,top就返回false而是top一定要返回一个int值这个时候,vector 在没有元素的时候,不知道返回个啥换用stack,看了下stack的操作,都是 o1的,stack 直接top 返回,好像也会报错:9/19 无法通过最后一个值是min,并不是top 出错看了下大神的写法,关键是是用std min 来返回std min 比直接 比较,有什么不可告人的高等智慧? int原创 2022-05-14 08:36:47 · 231 阅读 · 0 评论 -
【C++】剑指offer:两个栈实现队列
剑指offer2 地址队列是尾部进入,头部做删除,对应了题目的俩funcabc 入,队头就是a,栈是先入后出,cba入,那么栈顶就是a所以要删除队头a,a 如果先入栈1,那么再栈底,没有办法删掉。那么,把栈1数据转移到栈2, 最先压入栈1的a,出栈1,放入栈2,之后,就变为栈2的顶了。所以出栈就是从栈1 转移到栈2后,出栈。如果栈2,没有,并且栈1 也没有这时候返回-1如果栈2 没有,栈1有,那么从栈1做转移。这个时候,栈1要全部转移到栈2, 才能找到自己的队列头的第一个元素,出现再..原创 2022-05-14 01:16:28 · 209 阅读 · 0 评论 -
【算法】【sort 2.2.1】归并排序
分治法代表递归sort + mergelabuladong排序过程[Running] g++ test_sort_guibing_2.2..1.cpp -std=c++14 -o test_sort_guibing_2.2..1.exe && ./test_sort_guibing_2.2..1.exe 81 72 67 89 80 65 77 83 82 68 70 88--resize--12--b--sort;lo 0 hi 11sort;lo 0 hi..原创 2020-06-28 22:47:14 · 391 阅读 · 0 评论 -
【算法】【sort 2.1.3】希尔排序
shell sort是一种优化的 插入排序基于插入排序,每个不断缩小的区间得到后,都要做插入排序效率不稳定,但是一般比 插入排序好插入排序主要是做相邻的交换这东东有三层for执行过程:[Running] g++ test_sort_xier_2.3.cpp -std=c++14 -o test_sort_xier_2.3.exe && ./test_sort_xier_2.3.exe 100 99 8 7 200 3 1 4337 max h 7 43 99原创 2020-06-28 13:10:29 · 914 阅读 · 0 评论 -
EECS 489实验3:带Bloom过滤器的ImageDB
EECS 489实验3:带Bloom过滤器的ImageDBlab3服务器(imgdb)最终将成为我们的分布式哈希表(DHT)节点,但是在本实验中,我们假设只有一个这样的节点。中文介绍就完成本练习所需编写的行数而言,它很短。您只需要编写约10行代码。任务1有两行,任务2有8行。所需的时间长短取决于您对模块化算术和按位运算的满意程度。我们假定在本实验中设置客户端-服务器。服务器(...原创 2020-02-02 17:24:01 · 634 阅读 · 0 评论 -
第一章
INSERT_SORT(A)1. for j2. do key3. #把A[j]插入到前面已经排好序的序列A[1...j-1]里面去4. i5. while i>0 and A[i]>key6. do A[i+1]7. i8. A[i+1]原创 2010-01-26 12:06:00 · 969 阅读 · 0 评论 -
chapter 2 : The Complexity of Algorithms and the Lower Bounds of Problems
Definition (complexity)。The space complexity of an algorithm is the amount of memory it needs to run to completion. 。The time complexity of an algorithm is the amount of computer time it needs原创 2009-11-16 17:53:00 · 1387 阅读 · 0 评论