力扣第149场双周赛

文章目录

  • 题目总览
  • 题目详解
    • 找到字符串中合法的相邻数字
    • 重新安排会议得到最多空余时间I
    • 3440.重新安排会议得到最多空余时间II

第149场双周赛

题目总览

找到字符串中合法的相邻数字

重新安排会议得到最多空余时间I

重新安排会议得到最多空余时间II

变成好标题的最少代价

题目详解

找到字符串中合法的相邻数字

在这里插入图片描述

思路分析:签到题,但是可以借助这个Counter来计数,然后正常遍历即可

from collections import Counter
class Solution:def findValidPair(self, s: str) -> str:st = list(s)co = Counter(st)n = len(st)ans = ""for i in range(1,n):if st[i] != st[i-1] and co[st[i]] == int(st[i]) and co[st[i-1]] == int(st[i-1]):ans = st[i-1] + st[i]break#return ansreturn ans

重新安排会议得到最多空余时间I

在这里插入图片描述
在这里插入图片描述

思路1:
思路分析:首先得将题目进行转化,计算出每段时间的空余时间,对于活动,则记空余时间为0,对于每一个k,后续使用双指针进行,定窗口滑动的时候,k+=k

class Solution:def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:# 范围会很长se = list(zip(startTime,endTime))# 已经按照开始时间的升序排序se.sort(key=lambda x: x[0])# 可以先计算出空余时间段的一个情况# 要是能够统计对于一个空余时间段的左边和右边距离下一个空余时间段的数目就好了kong = []for i,(s,e) in enumerate(se):if i == 0:kong.append(s-0)kong.append(0)continue# 计算现在的活动与上一个活动之间的空余时间kong.append(se[i][0] - se[i-1][1])kong.append(0)kong.append(eventTime - se[-1][1])# 使用双指针进行计算n = len(kong)k+=knowsum = sum(kong[0:k + 1])ans = max(0, nowsum)left, right = 0, k + 1while right < n :nowsum = nowsum - kong[left] + kong[right]left += 1right += 1ans = max(ans, nowsum)# for i in range(n-k):#     ans = max(ans,sum(kong[i:i+k+1]))# 感觉上面一直调用这个sum 会超时return ans

参考灵神的思路

思路2:
思路2是对于思路1的优化,在思路1中,我们对于有活动安排的设置为0,这样实际上,让我们的kong数组变长,显得冗余,多余的部分,让我们的滑动窗口的长度变为了2K+1
实际上,我们对于n个活动,总共会产生n+1个空余时间段,对于重新安排的最多的k个会议,实际上就是求解合并其中k+1个连续的时间段,所能够得到的最大的空闲时间

class Solution:def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:# 获得对应的空闲时间def get(i: int) -> int:if i == 0:return startTime[0]if i == n:return eventTime - endTime[-1]return startTime[i] - endTime[i - 1]n = len(startTime)ans = s = 0# 定长滑动窗口的模版for i in range(n + 1):s += get(i)if i < k:continueans = max(ans, s)s -= get(i - k)return ans

3440.重新安排会议得到最多空余时间II

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路分析:总体来说,还是继续使用上一题:重新安排会议得到最多空余时间I的思路框架相当于上一题的k=1,不同的是,由于上一题不能修改活动的相对顺序,只能在相邻的两个空余时间之间移动,但是这一题可以平移出相邻的空闲时间限制,那么如何考虑这种情况?我们只需记录,空闲时间rest[i]的左边和右边的最大的空闲时间,如果能够容纳下该活动,则转移过去,同时ans要加上目前的活动

from typing import Listclass Solution:def maxFreeTime(self, eventTime: int, startTime: List[int], endTime: List[int]) -> int:"""计算最大空闲时间:param eventTime: 事件的总时间:param startTime: 每个事件的开始时间列表:param endTime: 每个事件的结束时间列表:return: 最大空闲时间"""n = len(startTime)if n == 0:return 0# 计算每个间隔的空闲时间rest = [0] * (n + 1)for i in range(n + 1):if i == 0:rest[i] = startTime[0]  # 第一个事件之前的空闲时间elif i == n:rest[i] = eventTime - endTime[n - 1]  # 最后一个事件之后的空闲时间else:rest[i] = startTime[i] - endTime[i - 1]  # 事件之间的空闲时间# 计算每个间隔左边的最大空闲时间left = [0] * (n + 1)for i in range(1, n + 1):left[i] = max(left[i - 1], rest[i - 1])# 计算每个间隔右边的最大空闲时间right = [0] * (n + 1)for i in range(n - 1, -1, -1):right[i] = max(right[i + 1], rest[i + 1])# 计算最大空闲时间ans = 0for i in range(n):# 当前两个连续的空闲时间current_rest = rest[i] + rest[i + 1]# 当前活动的时间act_time = endTime[i] - startTime[i]# 如果左边或右边的最大空闲时间大于当前活动时间,则将其加入if left[i] >= act_time or right[i + 1] >= act_time:current_rest += act_time# 更新最大空闲时间ans = max(ans, current_rest)return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25届 信息安全领域毕业设计选题88例:前沿课题

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

【算法设计与分析】实验6:n皇后问题的回溯法设计与求解

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 针对n皇后问题开展分析、建模、评价&#xff0c;算法设计与优化&#xff0c;并进行编码实践。 掌握回溯法求解问题的思想&#…

如何为用户设置密码

[rootxxx ~]# passwd aa #交互式的为用户设置密码 或者 [rootxxx ~]# echo 123 | passwd --stdin aa #不交互式的为用户设置密码 &#xff08;适用于批量的为用户更改密码&#xff0c;比如一次性为100个用户初始化密码&#xff09;

【Vaadin flow 实战】第5讲-使用常用UI组件绘制页面元素

vaadin flow官方提供的UI组件文档地址是 https://vaadin.com/docs/latest/components这里&#xff0c;我简单实战了官方提供的一些免费的UI组件&#xff0c;使用案例如下&#xff1a; Accordion 手风琴 Accordion 手风琴效果组件 Accordion 手风琴-测试案例代码 Slf4j PageT…

深入理解Java引用传递

先看一段代码&#xff1a; public static void add(String a) {a "new";System.out.println("add: " a); // 输出内容&#xff1a;add: new}public static void main(String[] args) {String a null;add(a);System.out.println("main: " a);…

Elasticsearch的开发工具(Dev Tools)

目录 说明1. **Console**2. **Search Profiler**3. **Grok Debugger**4. **Painless Lab**总结 说明 Elasticsearch的开发工具&#xff08;Dev Tools&#xff09;在Kibana中提供了多种功能强大的工具&#xff0c;用于调试、优化和测试Elasticsearch查询和脚本。以下是关于Cons…

【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类

一、支持向量机(support vector machines. &#xff0c;SVM)概念 1. SVM 绪论 支持向量机&#xff08;SVM&#xff09;的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据点分开。SVM 的关键特点包括&#xff1a; ① 分类与回归&#xff1a; SVM 可以用于分类&a…

C++并行化编程

C并行化编程 C 简介 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言&#xff0c;支持过程化编程、面向对象编程和泛型编程。 C 被认为是一种中级语言&#xff0c;它综合了高级语言和低级语言的特点。 C 是由 Bjarne Stroustrup 于 1979 年在新泽西州美…

记6(人工神经网络

目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络&#xff08;Feedforward Neural Networks&#xff09;5、鸢尾花数据集——单层前馈型神经网络&#xff1a;6、多层神经网络&#xff1a;增加隐含层7、实现异或运算&#xff08;01、10为1,00、11为0&#xff09;8、线性…

网工_HDLC协议

2025.01.25&#xff1a;网工老姜学习笔记 第9节 HDLC协议 9.1 HDLC高级数据链路控制9.2 HDLC帧格式&#xff08;*控制字段&#xff09;9.2.1 信息帧&#xff08;承载用户数据&#xff0c;0开头&#xff09;9.2.2 监督帧&#xff08;帮助信息可靠传输&#xff0c;10开头&#xf…

CSS(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、什么是CSS?二、基本语法规范三、CSS选择器3.1 标签选择器3.2 id选择器3.3 class选择器3.4 通配符选择器3.5 复合选择器 四、常用CSS样式4.1 color4.2 font…

3.Spring-事务

一、隔离级别&#xff1a; 脏读&#xff1a; 一个事务访问到另外一个事务未提交的数据。 不可重复读&#xff1a; 事务内多次查询相同条件返回的结果不同。 幻读&#xff1a; 一个事务在前后两次查询同一个范围的时候&#xff0c;后一次查询看到了前一次查询没有看到的行。 二…

C++STL之stack和queue容器(详细+通俗易懂)

前言:老铁们好&#xff0c;笔者好久没更新STL的容器了&#xff0c;今天&#xff0c;笔者接着之前的STL容器的内容继续更新&#xff0c;所以今天给老铁们分享的是STL里面的栈和队列的容器的知识。 1.栈的定义 老规矩&#xff0c;我们先来看看C的官网对stack的介绍文档。 然后…

DNS缓存详解(DNS Cache Detailed Explanation)

DNS缓存详解 清空DNS缓存可以让网页访问更快捷。本文将从什么是DNS缓存、为什么清空DNS缓存、如何清空DNS缓存、清空DNS缓存存在的问题四个方面详细阐述DNS缓存清空的相关知识。 一、什么是DNS缓存 1、DNS缓存的定义&#xff1a; DNS缓存是域名系统服务在遇到DNS查询时自动…

OFDM系统仿真

1️⃣ OFDM的原理 1.1 介绍 OFDM是一种多载波调制技术&#xff0c;将输入数据分配到多个子载波上&#xff0c;每个子载波上可以独立使用 QAM、PSK 等传统调制技术进行调制。这些子载波之间互相正交&#xff0c;从而可以有效利用频谱并减少干扰。 1.2 OFDM的核心 多载波调制…

第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测

目录 1. Shufflenet V2 2. 甲状腺结节检测 2.1 数据集 2.2 训练参数 2.3 训练结果 2.4 可视化网页推理 3. 下载 1. Shufflenet V2 shufflenet v2 论文中提出衡量轻量级网络的性能不能仅仅依靠FLOPs计算量&#xff0c;还应该多方面的考虑&#xff0c;例如MAC(memory acc…

网络编程套接字(中)

文章目录 &#x1f34f;简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 &#x1f350;多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务 &#x1…

happytime

happytime 一、查壳 无壳&#xff0c;64位 二、IDA分析 1.main 2.cry函数 总体&#xff1a;是魔改的XXTEA加密 在main中可以看到被加密且分段的flag在最后的循环中与V6进行比较&#xff0c;刚好和上面v6数组相同。 所以毫无疑问密文是v6. 而与flag一起进入加密函数的v5就…

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析&#xff0c;目前还处于陆续不断更新地更新过程中&#xff0c;为大佬的专业和开源贡献精神点赞。先收藏链接&#xff0c;后续慢慢学习。 相关链接如下&#xff1a; DIFY源码解析

Hot100之子串

560和为K的子数组 题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列 思路解析 ps&#xff1a;我们的presum【0】就是0&#xff0c;如果没有这个0的话我们的第一个元素就无法减去上…