当前位置: 首页 > news >正文

广州10大网站服务品牌wordpress 蜘蛛爬行插件

广州10大网站服务品牌,wordpress 蜘蛛爬行插件,吉安做网站,广州网站设计建站Leetcode 3440. Reschedule Meetings for Maximum Free Time II 1. 解题思路2. 代码实现 题目链接:3440. Reschedule Meetings for Maximum Free Time II 1. 解题思路 这一题某种意义上来说甚至是上一题Leetcode 3439的简化版本(关于这一题的解答可以…
  • Leetcode 3440. Reschedule Meetings for Maximum Free Time II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3440. Reschedule Meetings for Maximum Free Time II

1. 解题思路

这一题某种意义上来说甚至是上一题Leetcode 3439的简化版本(关于这一题的解答可以参考拙作Leetcode 3439. Reschedule Meetings for Maximum Free Time I),因为只要求 k = 1 k=1 k=1,但是差别在于可以改变会议的开始顺序。

因此,我们虽然不需要考察连续 k k k个会议的持续时间,但是需要考察一下在其他会议的间隔范围内是否存在某个gap大于当前会议的时间,如果存在的话我们就可以直接把该会议挪过去,这样就可以直接获取整段的自由时间了。

综上,这一题和上一题基本实现思路就完全一致,唯一的差别就在于需要多求一个其他会议区间内的最大gap时间,这个我们可以通过一个segment tree来实现,对应的内容网上有很多,我自己也有一篇博客作为备忘(经典算法:Segment Tree),因此这里就不过多展开了,有兴趣的读者可以移步去看看。

2. 代码实现

给出python代码实现如下:

class SegmentTree:def __init__(self, arr):self.length = len(arr)self.tree = self.build(arr)def feature_func(self, *args):return max(args)def build(self, arr):n = len(arr)tree = [0 for _ in range(2*n)]for i in range(n):tree[i+n] = arr[i]for i in range(n-1, 0, -1):tree[i] = self.feature_func(tree[i<<1], tree[(i<<1) | 1])return treedef update(self, idx, val):idx = idx + self.lengthself.tree[idx] = valwhile idx > 1:self.tree[idx>>1] = self.feature_func(self.tree[idx], self.tree[idx ^ 1])idx = idx>>1returndef query(self, lb, rb):if rb < lb:return 0lb += self.length rb += self.lengthnodes = []while lb < rb:if lb & 1 == 1:nodes.append(self.tree[lb])lb += 1if rb & 1 == 0:nodes.append(self.tree[rb])rb -= 1lb = lb >> 1rb = rb >> 1if lb == rb:nodes.append(self.tree[rb])return self.feature_func(*nodes)class Solution:def maxFreeTime(self, eventTime: int, startTime: List[int], endTime: List[int]) -> int:meetings = [(i, j, j-i) for i, j in zip(startTime, endTime)]n = len(meetings)freeTimes = [meetings[0][0]] + [meetings[i+1][0] - meetings[i][1] for i in range(n-1)] + [eventTime - meetings[-1][1]]ans = max(freeTimes)segment_tree = SegmentTree(freeTimes)durations = list(accumulate([x[2] for x in meetings], initial=0))for i in range(n):if i == 0:tot = meetings[i+1][0]elif i+1 == n:tot = eventTime - meetings[i-1][1]else:tot = meetings[i+1][0] - meetings[i-1][1]d = durations[i+1] - durations[i]gap = max(segment_tree.query(0, i-1), segment_tree.query(i+2, n))if d > gap:ans = max(ans, tot-d)else:ans = max(ans, tot)return ans

提交代码评测得到:耗时2361ms,占用内存51.1MB。

http://www.yayakq.cn/news/312108/

相关文章:

  • 如何在eclipse上做网站上海有什么大公司
  • 沈阳网站网站建设广西建设网登录入口
  • 114网站做推广怎么样怎么给网站添加关键词
  • 元邦物流网站建设金华婺城建设局网站
  • 免费网站100m江门营销网站建设
  • 学些网站制作网站服务器基本配置
  • 汕头网站建设哪家好中国工商注册营业执照的官网
  • 个人网站主页怎么做网站建设和信息更新的通知
  • 远程教育网站建设百度举报网站
  • 什么软件可以做动漫视频网站建站基础
  • 网站如何在百度上做推广方案海外网站代理
  • 微网站怎么做湘潭关键词优化公司
  • 网站建设 php 企业网站快速排名新
  • 河南网站优化排名南京机关建设网站
  • 淘宝客合伙人网站建设买一个网站多少钱
  • 怎么打开自己做的网站30天网站建设
  • 个人电子商务网站建设4399网页游戏开服表
  • 网站建设需要公司怎么做内网网站
  • l兰州网站建设这么建设新的网站
  • 青岛做外贸网站哪家好平面设计师和网页设计师哪个好
  • 共享网站的详细规划网站制作合肥
  • 大连住建部官方网站wordpress增加变量
  • 成都企业建网站天津制作网站首页
  • 石家庄住房建设厅网站公司网站一般找哪个公司做
  • 辽宁手机版建站系统信息档案网站建设对比
  • 规划网站的总结免费网站可以做淘宝客吗
  • 厦门行业网站建设新手如何入侵一个网站
  • 请别人做网站签订合同给个网站可以在线
  • 网站开发和运行 法律互联网行业发展
  • 用什么网站可以做链接seo外链软件