小弟忙里偷闲写的免费计数器,现在给大家免费提供,专栏里还没有的不用去申请了

博客提及来访者相关内容,表明 id 为 1 - 21 的都可以使用。

您是第?位来访者 效果如下: 您是第 位来访者

id=1-21都可以使用啊

?

以下是解决该问题的思路和代码实现。 要判断在总时长 `m` 小时内能否抽出 `s` 小时练习吉他,需要考虑算法训练计划的时间区间。可以先将算法训练计划的时间区间进行合并,计算出算法训练计划总共占用的时间,然后用总时长 `m` 减训练计划占用的时间,看剩余时间是否大于等于 `s`。 以下是Python代码实现: ```python def merge_intervals(intervals): if not intervals: return [] # 按区间的起始时间排序 intervals.sort(key=lambda x: x[0]) merged = [intervals[0]] for interval in intervals[1:]: # 如果当前区间的起始时间小于等于前一个合并区间的结束时间 if interval[0] <= merged[-1][1]: # 合并区间 merged[-1][1] = max(merged[-1][1], interval[1]) else: # 不能合并,添加新的区间 merged.append(interval) return merged def can_practice(m, s, intervals): # 合并算法训练计划的时间区间 merged_intervals = merge_intervals(intervals) # 计算算法训练计划占用的总时间 total_training_time = 0 for interval in merged_intervals: total_training_time += interval[1] - interval[0] # 计算剩余时间 remaining_time = m - total_training_time # 判断剩余时间是否足够练习吉他 return remaining_time >= s # 示例用法 m = 24 # 总时长 s = 3 # 练习吉他所需时长 intervals = [[2, 5], [7, 9], [12, 15]] # 算法训练计划时间区间 result = can_practice(m, s, intervals) print(result) ``` ### 代码解释 1. **`merge_intervals` 函数**:该函数用于合并重叠的时间区间。首先对时间区间按起始时间排序,然后遍历排序后的区间,将重叠的区间合并为一个更大的区间。 2. **`can_practice` 函数**:该函数首先调用 `merge_intervals` 函数合并时间区间,然后计算合并后区间的总时长,用总时长 `m` 减训练计划占用的时间,得到剩余时间。最后判断剩余时间是否大于等于 `s`。 ### 复杂度分析 - **时间复杂度**:排序操作的时间复杂度为 $O(n log n)$,合并区间的时间复杂度为 $O(n)$,因此总的时间复杂度为 $O(n log n)$,其中 $n$ 是时间区间的数量。 - **空间复杂度**:主要的空间开销是合并后的区间列表,因此空间复杂度为 $O(n)$。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值