- 博客(25)
- 收藏
- 关注
原创 每日一题算法--反转字符串
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]
2025-04-29 23:48:07
577
原创 每日一题算法--四数之和
在关于哈希表,你该了解这些!中,我们介绍了哈希表的基础理论知识,不同于枯燥的讲解,这里介绍了都是对刷题有帮助的理论知识点。一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。数组set(集合)map(映射)
2025-04-28 10:24:25
1266
原创 每日一题算法--三数之和
接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。这么写就是当前使用 nums[i],我们判断前一位是不是一样的元素,在看 {-1, -1 ,2} 这组数据,当遍历到 第一个 -1 的时候,只要前一位没有-1,那么 {-1, -1 ,2} 这组数据一样可以收录到 结果集里。说到去重,其实主要考虑三个数的去重。
2025-04-26 21:55:14
1474
原创 每日算法——快乐数、两数之和
由于是两数之和,根据当前遍历到的值,去map中找是否有target- nums[i]的值即可。时间复杂度为o(n)的解法:使用hash map(存储键值对);
2025-04-24 22:57:04
376
原创 每日一题算法——两个数组的交集
std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。那么用数组来做哈希表也是不错的选择,例如。缺点:当取值范围很大时,浪费空间。
2025-04-23 09:56:06
551
原创 每日一题算法——有效的字母异位词
那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。最后如果record数组所有元素都为零0,说明字符串s和t是字母异位词,return true。时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)。定义一个数组叫做record用来上记录字符串s里字符出现的次数。这样就将字符串s中字符出现的次数,统计出来了。需要把字符映射到数组也就是哈希表的索引下标上,再遍历 字符串s的时候,
2025-04-22 10:45:27
551
原创 每日一题算法——环形链表
链表的种类主要为:单链表,双链表,循环链表链表的存储方式:链表的节点在内存中是分散存储的,通过指针连在一起。链表是如何进行增删改查的。数组和链表在不同场景下的性能分析。在链表:一道题目考察了常见的五个操作!中,我们通过设计链表把链表常见的五个操作练习了一遍。获取链表第index个节点的数值在链表的最前面插入一个节点在链表的最后面插入一个节点在链表第index个节点前面插入一个节点删除链表的第index个节点的数值。
2025-04-21 21:18:23
1576
原创 每日一题算法——链表相交
此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。
2025-04-20 13:36:11
711
原创 每日算法——两两交换链表中的节点、删除链表的第N个节点
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。最重要的是对过程模拟出来,在纸张草稿清楚。搞清楚断开和链接的顺序,要存储哪些点。使用dummyhead 可以免除特殊情况的分析。常规解法:两遍扫描+特殊情况(删除头结点)只遍历一遍:双指针(快慢指针)
2025-04-19 16:43:48
386
原创 每日一题算法——移除链表元素、反转链表
增加一个伪头结点dummyhead,dummyhead->next = head;这样可以统一头结点和后续节点的删除方式。注意细节:要删掉移除的元素。
2025-04-17 22:43:47
413
原创 每日一题算法——区间和
易错点:若求a-b的区间和应该是nun[b]-num[a-1],判断a==0的情况。将数组每个位置存为0到该位置的总和,可以很容易求出该区间的总和。
2025-04-16 08:14:32
402
原创 每日一题算法——螺旋矩阵
这道题没有用到什么特别的算法,重点在于对于螺旋的分解,每各螺旋分成四个登场的部分,统一区间的开闭(左闭右开)。此外若n为奇数要对中心额外赋值。
2025-04-15 18:54:11
429
原创 每日一题算法——长度最小的子数组
精髓在于:先让这个滑动窗口尾端不断增大,当它大于等于target时,先判断此时与子数组长度是否需要更新,判断完成之后,这时可以将其头部后移。这道题目暴力解法当然是 两个for循环,然后不断的寻找符合条件的子序列,时间复杂度很明显是O(n^2)。后面力扣更新了数据,暴力解法已经超时了。时间复杂度:O(n^2)空间复杂度:O(1)
2025-04-14 10:59:53
430
原创 每日一题算法——有序数组的平方
这个时间复杂度是 O(n + nlogn), 可以说是O(nlogn)的时间复杂度,但为了和下面双指针法算法时间复杂度有鲜明对比,我记为 O(n + nlog n)。我的题解:双指针(left,right)->拷贝到一个新数组。其它解法:各种排序算法。
2025-04-13 18:09:23
293
原创 每日一题算法——移除元素
slow指向下一个存储数字的位置,fast用来找val,若当前fast==val,跳过。错误点:未注意边界。该解法需要对边界有精确判断,较为复杂。本人解法:使用双端指针。
2025-04-12 21:15:36
269
原创 深度强化学习中的Double-DQN:解决Q值过估计的革新方法
Double-DQN通过解耦动作选择与价值评估,有效缓解了DQN的Q值过估计问题,成为深度强化学习中的基础改进算法。其简洁的实现方式与显著的性能提升,使其成为Atari、机器人控制等任务的首选框架。未来,随着与分布强化学习(Distributional RL)、元学习等技术的结合,Double-DQN有望在更复杂的决策场景中持续发挥核心作用。
2025-03-17 23:32:33
1250
原创 深度强化学习——DQN
DQN开创了深度强化学习的新时代,证明了神经网络在复杂决策任务中的潜力。尽管存在计算成本高、训练不稳定等挑战,通过经验回放、目标网络及后续变体改进,DQN已成为DRL的基础框架。未来,结合元学习、多任务迁移、以及更高效的探索策略(如基于熵最大化),DQN有望在自动驾驶、医疗决策等现实场景中发挥更大价值。
2025-03-16 23:28:52
1675
原创 强化学习基础篇——规划与学习
规划(Planning)基于环境模型(Model),通过模拟生成状态-动作序列,计算最优策略。典型方法包括动态规划(DP)和蒙特卡洛树搜索(MCTS)。
2025-03-16 11:27:46
1250
原创 强化学习基础篇——策略梯度
策略梯度方法通过直接优化参数化策略,克服了值函数方法在连续动作和高维状态空间中的局限性,成为复杂决策任务的首选方案。从基础的REINFORCE到现代的PPO、SAC,策略梯度通过引入优势估计、信任域约束等技术不断提升稳定性与效率。其在机器人控制、游戏AI、自动驾驶等领域的成功应用,验证了其强大的建模能力。未来,随着与深度学习、多任务学习的进一步融合,策略梯度有望在通用人工智能、实时决策系统中发挥更核心的作用。
2025-03-15 20:32:04
2181
原创 强化学习基础篇——值函数近似
值函数近似是强化学习应对大规模状态空间的核心技术,通过参数化函数替代表格存储,实现了从低维到高维、从离散到连续问题的扩展。线性近似提供理论保障,而非线性近似(如神经网络)在实践中展现出强大的潜力。尽管面临收敛性、探索与利用平衡等挑战,通过目标网络、经验回放等技术,值函数近似已在游戏AI、机器人控制等领域取得突破。随着深度学习与强化学习的进一步融合,值函数近似将继续推动通用人工智能的发展,尤其是在复杂环境建模、多任务泛化等方向。
2025-03-14 14:08:58
1504
原创 强化学习基础篇——Q-learning和SARSA
Q-learning 和 SARSA 是强化学习中两种重要的时序差分算法,分别代表了离策略和在策略的学习方法。Q-learning 通过直接学习最优动作价值函数,能够收敛到全局最优策略,但在探索与利用的平衡上可能存在不足。SARSA 则基于当前策略学习动作价值函数,更适合动态环境和需要保守决策的场景。在实际应用中,选择哪种算法取决于具体问题的性质和环境的特点。随着深度强化学习的发展,Q-learning 和 SARSA 的思想也被扩展到更复杂的场景中,例如深度 Q 网络(DQN)和深度 SARSA 算法。
2025-03-13 13:45:08
1181
原创 强化学习基础篇-马尔可夫决策过程
马尔可夫决策过程是强化学习的理论基础,提供了一种形式化的方法描述智能体与环境的交互过程。通过定义状态空间、动作空间、转移概率和奖励函数,MDP 能够建模复杂的决策问题。动态规划、蒙特卡罗方法和时序差分学习是求解 MDP 的经典方法,而 MDP 在游戏 AI、机器人控制、资源管理和医疗决策等领域展现了强大的应用潜力。随着深度强化学习的发展,MDP 框架与神经网络结合,进一步扩展了其解决复杂问题的能力。欢迎批评指正!
2025-03-12 23:23:27
1047
原创 MADDPG技术分析
传统的单智能体强化学习算法在面临多智能体环境时往往表现欠佳,主要面临环境非稳态、信用分配困难等挑战。随着多智能体系统在智能制造、智慧城市等领域的深化应用,MADDPG及其改进算法将持续推动群体智能决策技术的发展。1. **环境非稳态**:多个智能体同时学习导致环境动态持续变化。3. **维度灾难**:联合状态-动作空间随智能体数量指数级膨胀。2. **信用分配**:难以评估单个智能体对全局奖励的贡献程度。4. **通信约束**:智能体间的信息交互面临带宽和延迟限制。
2025-03-07 16:57:10
649
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅