力扣第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.rhkb.cn/news/11471.html

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

相关文章

HTB:Alert[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用ffuf对alert.htb域名进行子域名FUZZ 使用go…

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全漏洞 erro…

吴恩达深度学习——有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 训练集、验证集、测试集偏差、方差正则化正则化参数为什么正则化可以减少过拟合Dropout正则化Inverted Dropout其他的正则化方法数据增广Early stopping 归一化梯度消失与梯度爆…

【xdoj-离散线上练习】T251(C++)

解题反思&#xff1a; 开始敲代码前想清楚整个思路比什么都重要嘤嘤嘤&#xff01;看到输入m, n和矩阵&#xff0c;注意不能想当然地认为就是高m&#xff0c;宽n的矩阵&#xff0c;细看含义 比如本题给出了树的邻接矩阵&#xff0c;就是n*n的&#xff0c;代码实现中没有用到m这…

deep seek R1本地化部署及openAI API调用

先说几句题外话。 最近deep seek火遍全球&#xff0c;所以春节假期期间趁着官网优惠充值了deep seek的API&#xff0c;用openAI的接口方式尝试了下对deep seek的调用&#xff0c;并且做了个简单测试&#xff0c;测试内容确实非常简单&#xff1a;通过prompt提示词让大模型对用…

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/…

Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图

目录 数据可视化1.使用 matplotlib 库matplotlib 库 2 .使用 seaborn 库seaborn 库 3 .使用 pyecharts库pyecharts库 注意1. 确保安装了所有必要的库2. 检查Jupyter Notebook的版本3. 使用render()方法保存为HTML文件4. 使用IFrame在Notebook中显示HTML文件5. 检查是否有其他输…

无人机集群新年祝福表演技术原理详解

无人机集群新年祝福表演技术是一项集飞行控制技术、智能协调和精密控制于一体的高科技表演形式。其技术原理主要涉及无人机硬件设备、软件系统以及表演协调等多个方面。以下是对该技术原理的详细解析&#xff1a; 一、无人机硬件设备 无人机集群表演的核心是无人机本身&#x…

贪吃蛇实现

1.资料来源 https://learn.microsoft.com/zh-cn/windows/console/getstdhandle 2.前言 简介 贪吃蛇是久负盛名的游戏&#xff0c;和俄罗斯方块、扫雷等游戏位列于经典游戏的行列。 《贪食蛇》中玩家控制一条不断移动的蛇&#xff0c;在屏幕上吃掉出现的食物。每吃掉一个食物…

计算机毕业设计Python动漫推荐系统 漫画推荐系统 动漫视频推荐系统 机器学习 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

MyBatis-Plus笔记-快速入门

大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

《OpenCV》——图像透视转换

图像透视转换简介 在 OpenCV 里&#xff0c;图像透视转换属于重要的几何变换&#xff0c;也被叫做投影变换。下面从原理、实现步骤、相关函数和应用场景几个方面为你详细介绍。 原理 实现步骤 选取对应点&#xff1a;要在源图像和目标图像上分别找出至少四个对应的点。这些对…

克隆OpenAI(基于openai API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain import osdef get_chat_response(api_key,prompt,memory): # memory不能是函数的内部局部变量&…

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域&#xff0c;周围八个格子分别放置了不同的奖品名称&#xff0c;中间是一个 “开始抽奖” 的按钮。点击按钮后&#xff0c;抽奖区域的格子会快速滚动&#xff0c;颜色不断变化&#xf…

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程&#xff1a; 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…

Elasticsearch的索引生命周期管理

目录 说明零、参考一、ILM的基本概念二、ILM的实践步骤Elasticsearch ILM策略中的“最小年龄”是如何计算的&#xff1f;如何监控和调整Elasticsearch ILM策略的性能&#xff1f; 1. **监控性能**使用/_cat/thread_pool API基本请求格式请求特定线程池的信息响应内容 2. **调整…

MQTT知识

MQTT协议 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;专门针对低带宽和不稳定网络环境的物联网应用而设计&#xff0c;可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、…

LabVIEW如何高频采集温度数据?

在LabVIEW中进行高频温度数据采集时&#xff0c;选择合适的传感器&#xff08;如热电偶或热电阻&#xff09;和采集硬件是关键。下面是一些建议&#xff0c;帮助实现高效的温度数据采集&#xff1a; 1. 传感器选择&#xff1a; 热电偶&#xff08;Thermocouple&#xff09;&am…

前端 | 深入理解Promise

1. 引言 JavaScript 是一种单线程语言&#xff0c;这意味着它一次仅能执行一个任务。为了处理异步操作&#xff0c;JavaScript 提供了回调函数&#xff0c;但是随着项目处理并发任务的增加&#xff0c;回调地狱 (Callback Hell) 使异步代码很难维护。为此&#xff0c;ES6带来了…

gesp(C++六级)(10)洛谷:P10722:[GESP202406 六级] 二叉树

gesp(C六级)&#xff08;10&#xff09;洛谷&#xff1a;P10722&#xff1a;[GESP202406 六级] 二叉树 题目描述 小杨有⼀棵包含 n n n 个节点的二叉树&#xff0c;且根节点的编号为 1 1 1。这棵二叉树任意⼀个节点要么是白色&#xff0c;要么是黑色。之后小杨会对这棵二叉树…