- 博客(1472)
- 收藏
- 关注
原创 (每日一题)差值———<排序>
摘要:题目要求计算数组中相邻元素的最小差值。解法采用排序后遍历相邻元素的策略,时间复杂度为O(nlogn)。C++实现中先排序数组,然后遍历比较相邻元素差值,保留最小值。Java实现类似,使用Arrays.sort排序,并用long类型防止数值溢出。两种语言都通过排序简化了相邻元素的比较过程,确保在O(n)的遍历中找到最小差值。
2025-07-04 14:39:09
170
原创 (每日一题)循环汉诺塔———<动态规划>
摘要:本文介绍了循环汉诺塔问题的动态规划解法。通过分析发现操作次数存在规律,可采用动态规划优化空间复杂度。C++和Java实现都采用类似思路,使用两个变量x和y分别表示移动金片到B和C的操作次数,在每次迭代中更新这两个状态。最终结果对1000000007取模,输出两个操作次数。算法时间复杂度O(n),空间复杂度O(1)。
2025-06-19 14:25:54
237
原创 (每日一题)ruby和薯条———<排序+二分/双指针>
题目要求统计数组中差值在[L,R]范围内的数对个数。提供两种解法:1)排序后二分查找,枚举每个元素作为较大值,在左侧区间二分查找满足条件的范围;2)排序后利用前缀和与双指针技巧,将问题转化为两个区间计数之差。两种方法都先排序,解法一时间复杂度O(nlogn),空间复杂度O(1);解法二同样O(nlogn)时间但代码更简洁。提供了C++和Java两种语言的实现代码。
2025-06-15 14:17:36
295
原创 (每日一题)kotori和抽卡(⼆)———<概率-数学期望>
题目摘要:Kotori抽卡概率计算问题。给定n次抽卡机会,要求恰好抽中m次的概率。解法使用组合概率公式:C(n,m)(0.8)^m(0.2)^(n-m)。代码实现通过循环计算组合数,并乘以成功/失败概率的幂次,最后输出保留4位小数的结果。提供C++和Java两种实现,核心算法相同,均采用连乘/连除计算组合数,再乘以相应概率。时间复杂度O(n),适用于小规模数据。
2025-05-29 14:26:02
133
原创 (每日一题)小红的子串———<前缀和+双指针>
摘要:本文介绍了解决"小红的子串"问题的算法。题目要求计算字符串中字符种类在[l,r]范围内的子串数量。采用前缀和思想,将问题转换为求[1,r]与[1,l-1]区间子串数的差值。算法使用滑动窗口技术:维护一个窗口统计字符种类,当种类超过x时移动左指针,并累加有效子串数(右-左+1)。C++和Java实现均通过find(x)函数计算[1,x]范围的子串数,最终输出find(r)-find(l-1)的结果。时间复杂度为O(n),空间复杂度O(1)。
2025-05-28 14:34:01
275
原创 (每日一题)兑换零钱———<动态规划-完全背包>
题目“DP44兑换零钱”是一个典型的完全背包问题,旨在通过给定的硬币面额组合出目标金额,并找出所需的最少硬币数。解法采用动态规划,通过构建一个dp数组来记录达到每个金额所需的最小硬币数。初始时,dp[0]设为0,表示金额为0时不需要硬币,其他位置初始化为一个极大值。然后,遍历每个硬币面额,更新dp数组,确保每个金额都能通过最少的硬币组合得到。最终,如果目标金额无法通过给定硬币组合得到,则返回-1,否则返回所需的最小硬币数。代码提供了C++和Java两种实现,均遵循上述思路。
2025-05-21 14:26:08
207
原创 (每日一题)最大差值———<模拟+贪心>
题目MT1最大差值要求找出数组中两个元素之间的最大差值,其中第二个元素必须位于第一个元素之后。解法通过遍历数组,使用一个变量记录当前位置之前的最小值,并计算当前元素与最小值的差值,更新最大差值。C++和Java的代码实现类似,核心思路是维护一个最小值变量,并在遍历过程中不断更新最大差值。最终返回最大差值,若为负则返回0。
2025-05-14 14:33:45
158
原创 (每日一题)过桥———<BFS>
题目“过桥”描述了一个需要通过桥的问题,解法采用了类似层序遍历的算法思路。C++和Java的代码实现均通过广度优先搜索(BFS)来解决问题。算法核心在于记录每一轮能够到达的最远点,并不断更新搜索区间,直到能够到达终点或确定无法到达。C++代码使用数组存储数据,并通过循环更新区间;Java代码则通过Scanner读取输入,并利用Math.max函数更新最远点。两种实现均返回达到终点所需的最少步数,若无法到达则返回-1。
2025-05-13 14:31:50
170
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人