力扣第149场双周赛

news/2025/2/4 0:15:53/

文章目录

  • 题目总览
  • 题目详解
    • 找到字符串中合法的相邻数字
    • 重新安排会议得到最多空余时间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.ppmy.cn/news/1569093.html

相关文章

使用TensorFlow实现逻辑回归:从训练到模型保存与加载

1. 引入必要的库 首先&#xff0c;需要引入必要的库。TensorFlow用于构建和训练模型&#xff0c;pandas和numpy用于数据处理&#xff0c;matplotlib用于结果的可视化。 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layer…

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉_json转formdata

formData 请求头&#xff1a; formData 负荷&#xff1a; 通过上面的几张图我们就能大概明白了&#xff0c;前端传的都是二进制数据&#xff0c;两者的 content-type 是不同的&#xff0c;json 我们已经序列化好了&#xff0c;而 formdata 还是需要进行处理。 formdata 的两种格…

ubuntu无法上网的解决办法

Ubuntu系统无法联网可能有多种原因&#xff0c;以下是一些常见的排查步骤和解决方法&#xff1a; 1. 检查网络连接状态 首先&#xff0c;确认网络接口是否已启用。 ip a查看网络接口&#xff08;如eth0、wlan0&#xff09;是否有IP地址。如果没有&#xff0c;可能是接口未启…

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…

Rust语言的编程范式

Rust语言的编程范式 引言 在现代编程语言中&#xff0c;Rust以其独特的编程范式和内存管理机制脱颖而出。Rust不仅关注性能与安全性&#xff0c;还通过其独特的语法和强大的工具链&#xff0c;引导开发者采取更好的编程实践。本文将深入探讨Rust语言的编程范式&#xff0c;包…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.12 连续数组:为什么contiguous这么重要?

2.12 连续数组&#xff1a;为什么contiguous这么重要&#xff1f; 目录 #mermaid-svg-wxhozKbHdFIldAkj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wxhozKbHdFIldAkj .error-icon{fill:#552222;}#mermaid-svg-…

【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027

本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选…

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图&#xff1a; MySQL主要分为Server层和存储引擎层 Server层&#xff1a; 连接器&#xff1a;连接客户端&#xff0c;获取权限&#xff0c;管理连接 查询缓存&#xff08;可选&#xff09;&#xff1a;在执行查询语句之前会先到查询缓存中查看是否执行过这条语…