LeetCode 每日一题 2025/7/7-2025/7/13

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • 7/7 1353. 最多可以参加的会议数目
      • 7/8 1751. 最多可以参加的会议数目 II
      • 7/9 3439. 重新安排会议得到最多空余时间 I
      • 7/10 3440. 重新安排会议得到最多空余时间 II
      • 7/11 3169. 无需开会的工作日
      • 7/12 1900. 最佳运动员的比拼回合
      • 7/13 2410. 运动员和训练师的最大匹配数


7/7 1353. 最多可以参加的会议数目

将会议按照开始时间从小到大分组 在组内尽量选择结束日期早的选择

def maxEvents(events):""":type events: List[List[int]]:rtype: int"""import heapqmx=max(e[1] for e in events)grp=[[] for _ in range(mx+1)]for e in events:grp[e[0]].append(e[1])ans=0h=[]for i,g in enumerate(grp):while h and h[0]<i:heapq.heappop(h)for end in g:heapq.heappush(h, end)if h:ans+=1heapq.heappop(h)return ans

7/8 1751. 最多可以参加的会议数目 II

根据结束时间先后排序
dp[i][j]表示前i个会议选择j个最大价值和
i不参加
dp[i][j]=dp[i-1][j]
i参加 假设在[1,starti-1]内有p个会议
dp[i][j]=dp[p][j-1]+value
二分查找结束时间早于starti的会议数目

def maxValue(events, k):""":type events: List[List[int]]:type k: int:rtype: int"""import bisectevents.sort(key=lambda x:x[1])n=len(events)dp=[[0]*(k+1) for _ in range(n+1)]for i,(start,end,v) in enumerate(events):p=bisect.bisect_left(events, start,hi=n-1,key=lambda x:x[1])for j in range(1,k+1):dp[i+1][j]=max(dp[i][j],dp[p][j-1]+events[i][2])return dp[n][k]

7/9 3439. 重新安排会议得到最多空余时间 I

转换为合并相邻的k+1个空余时间块
滑动长度为k+1的窗口

def maxFreeTime(eventTime, k, startTime, endTime):""":type eventTime: int:type k: int:type startTime: List[int]:type endTime: List[int]:rtype: int"""n=len(startTime)free=[0]*(n+1)free[0]=startTime[0]free[-1]=eventTime-endTime[-1]for i in range(1,n):free[i]=startTime[i]-endTime[i-1]ans=0cur=0for i,f in enumerate(free):cur+=fif i<k:continueans=max(ans,cur)cur-=free[i-k]return ans

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

只能移动一次会议 就是将相邻的两个空余时间合并
最理想的情况 两个空余时间中间的会议可以安排到另一个空余时间内
得到结果就是两个空余时间相加再加上中间的会议时间
否则只能是两个空余时间相加
为了判断是否可以放入会议 记录前三大的空位

def maxFreeTime(eventTime, startTime, endTime):""":type eventTime: int:type startTime: List[int]:type endTime: List[int]:rtype: int"""n=len(startTime)def find(i):if i==0:return startTime[0]if i==n:return eventTime-endTime[-1]return startTime[i]-endTime[i-1]a,b,c=0,-1,-1for i in range(1,n+1):v=find(i)if v>find(a):a,b,c=i,a,belif b<0 or v>find(b):b,c=i,belif c<0 or v>find(c):c=ians=0for i,(s,e) in enumerate(zip(startTime,endTime)):v=e-sif i!=a and i+1!=a and v<=find(a) or (i!=b and i+1!=b and v<=find(b)) or v<=find(c):ans=max(ans,find(i)+v+find(i+1))else:ans=max(ans,find(i)+find(i+1))return ans

7/11 3169. 无需开会的工作日

将开会起始日期从小到大排序 合并重叠的会议
工作日减去开会的天数

def countDays(days, meetings):""":type days: int:type meetings: List[List[int]]:rtype: int"""meetings.sort()l,r=1,0for m in meetings:if m[0]>r:days-=r-l+1l=m[0]r=max(r,m[1])days-=r-l+1return days

7/12 1900. 最佳运动员的比拼回合

参考:https://leetcode.cn/problems/the-earliest-and-latest-rounds-where-players-compete/solutions/825860/dpmei-ju-xia-yi-lun-liang-ming-xuan-shou-okfu/?envType=daily-question&envId=2025-07-12

def earliestAndLatest(n, firstPlayer, secondPlayer):""":type n: int:type firstPlayer: int:type secondPlayer: int:rtype: List[int]"""if firstPlayer + secondPlayer == n + 1:return [1, 1]if firstPlayer + secondPlayer > n + 1:firstPlayer, secondPlayer = n + 1 - secondPlayer, n + 1 - firstPlayerdef calc_earliest_rounds(n):res = 1if firstPlayer + secondPlayer <= (n + 1) // 2:while firstPlayer + secondPlayer <= (n + 1) // 2:res += 1n = (n + 1) // 2if secondPlayer - firstPlayer > 1:return res + 1if secondPlayer - firstPlayer == 1:res += 1n = (n + 1) // 2while n % 2 > 0:res += 1n = (n + 1) // 2return resif secondPlayer <= (n + 1) // 2:return res + 1if secondPlayer - firstPlayer == 2:res += 1n = (n + 1) // 2while n % 2 > 0:res += 1n = (n + 1) // 2return resif firstPlayer % 2 == 0 and firstPlayer + secondPlayer == n:res += 1return res + 1earliest = calc_earliest_rounds(n)latest = min((n - 1).bit_length(), n + 1 - secondPlayer)return [earliest, latest]

7/13 2410. 运动员和训练师的最大匹配数

运动员和训练师从大到小排列 双指针依次比较
如果当前最大训练师无法训练 当前运动员必定训练不了 考虑下一个运动员

def matchPlayersAndTrainers(players, trainers):""":type players: List[int]:type trainers: List[int]:rtype: int"""players.sort(reverse=True)trainers.sort(reverse=True)i,j=0,0ans=0while i<len(players) and j<len(trainers):if players[i]<=trainers[j]:ans+=1i+=1j+=1else:i+=1return ans

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

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

相关文章

Bash常见条件语句和循环语句

以下是 Bash 中常用的条件语句和循环语句分类及语法说明&#xff0c;附带典型用例&#xff1a;一、条件语句 1. if 语句 作用&#xff1a;根据条件执行不同代码块 语法&#xff1a; if [ 条件 ]; then# 条件为真时执行 elif [ 其他条件 ]; then# 其他条件为真时执行 else# 所有…

uni-app 选择国家区号

uni-app选择国家区号组件 hy-countryPicker 我们在做登录注册功能的时候&#xff0c;可能会遇到选择区号来使用不同国家手机号来登录或者注册的功能。这里我就介绍下我这个uni-app中使用的选择区号的组件&#xff0c;包含不同国家国旗图标。 效果图 别的不说&#xff0c;先来…

客户端主机宕机,服务端如何处理 TCP 连接?详解

文章目录一、客户端主机宕机后迅速重启1、服务端有数据发送2、服务端开启「保活」机制3、服务端既没有数据发送&#xff0c;也没有开启「保活」机制二、客户端主机宕机后一直没有重启1、服务端有数据发送2、服务端开启「保活」机制3、服务端既没有数据发送&#xff0c;也没有开…

《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作

目 录 一、实验目的 二、实验环境 三、数据集 四、实验内容与完成情况 4.1 创建一个内部表 stocks&#xff0c;字段分隔符为英文逗号&#xff0c;表结构下所示。 4.2 创建一个外部分区表 dividends&#xff08;分区字段为 exchange 和symbol&#xff09;&#xff0c;字段…

【橘子分布式】Thrift RPC(编程篇)

一、简介 之前我们研究了一下thrift的一些知识&#xff0c;我们知道他是一个rpc框架&#xff0c;他作为rpc自然是提供了客户端到服务端的访问以及两端数据传输的消息序列化&#xff0c;消息的协议解析和传输&#xff0c;所以我们今天就来了解一下他是如何实现这些功能&#xff…

清理C盘--办法

c盘经常爆红1、命令行2、属性3、临时文件

Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有…

创客匠人:创始人 IP 打造的内核,藏在有效的精神成长里

当创始人 IP 成为企业增长的重要引擎&#xff0c;许多人急于寻找 “爆款公式”&#xff0c;却忽略了一个更本质的问题&#xff1a;IP 的生命力&#xff0c;终究源于创始人的精神成长。创客匠人在深耕知识付费赛道的过程中&#xff0c;见证了无数案例&#xff1a;那些能持续实现…

GPT和MBR分区

GPT&#xff08;GUID分区表&#xff09;和MBR&#xff08;主引导记录&#xff09;是两种不同的磁盘分区表格式&#xff0c;用于定义硬盘上分区的布局、位置及启动信息&#xff0c;二者在设计、功能和适用场景上有显著差异。以下从多个维度详细对比&#xff1a; 一、核心定义与起…

c#进阶之数据结构(字符串篇)----String

1、String介绍首先我们得明白&#xff0c;string和String代表的实际上是同一个类型&#xff0c;string是C#中的关键字&#xff0c;代表String类型&#xff0c;因此我们直接来学习String类型。从官方的底层实现代码可以看出&#xff0c;当前String类型实际上就是一个Char类型的聚…

快速排序递归和非递归方法的简单介绍

基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均大于基准值&#xff0c;然后最左右子序列重复该过程&#xff0c;直到所有元…

从零开始的云计算生活——第三十二天,四面楚歌,HAProxy负载均衡

目录 一.HAProxy简介 二.HAProxy特点和优点&#xff1a; 三.HAProxy保持会话的三种解决方法 四.HAProxy的balance 8种负载均衡算法 1&#xff09;RR&#xff08;Round Robin&#xff09; 2&#xff09;LC&#xff08;Least Connections&#xff09; 3&#xff09;SH&am…

策略模式及优化

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;其核心思想是将算法的定义与使用分离&#xff0c;使算法可以独立于客户端进行变化。它通过定义一系列算法&#xff0c;将每个算法封装到独立的类中&#xff0c;并使它们可以互相替换&#xff0…

微信小程序开发-桌面端和移动端UI表现不一致问题记录

桌面端和移动端UI表现不一致零、引擎说明一、样式不同1、text 单行&#xff1a;1.1 空格开发者工具不展示&#xff0c;手机/PC端正常1.2 正常展示省略号&#xff0c;需要2、点击按钮z-index: -1。webview - 桌面端不行&#xff0c; skyline - 移动端可以&#xff1b;3、其他说明…

极限状态下函数开根号的计算理解(含示意图)

遇到一个挺有意思的题做个记录&#xff1a; 求曲线y (x21)(x2−1)0.5\frac{\left(x^{2}1\right)}{\left(x^{2}-1\right)^{0.5}}(x2−1)0.5(x21)​渐近线的条数 比较明显的x 1是无定义点。但是在求极限的时候发现1和1-得到的极限值似乎不一样。似乎是1是趋向于∞&#xff0c;1…

C++——模版(函数模版和类模版)

C 模板&#xff08;Templates&#xff09;完整介绍模板是 C 中一种强大的泛型编程机制&#xff0c;允许开发者编写与类型无关的代码&#xff0c;从而提高代码的复用性和灵活性。通过模板&#xff0c;可以避免为不同数据类型重复编写相似的函数或类&#xff0c;实现真正的代码复…

Python之cv2:cv2(OpenCV,opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全

Python之cv2&#xff1a;cv2(OpenCV&#xff0c;opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全 在学习和使用 OpenCV&#xff08;Python 包名&#xff1a;opencv-python 或简称 cv2&#xff09;的过程中&#xff0c;很多初学者常常会遇到通过 pip install o…

asyncio 与 uvloop

事件循环 事件循环 协调所有协程执行的中央调度器&#xff0c;它通过非阻塞机制&#xff0c;实现并发执行多个异步任务。 事件循环是 异步编程的核心机制&#xff0c;用一句话概括就是&#xff1a; 事件循环不断检查任务队列&#xff0c;一旦某个异步任务完成&#xff0c;它…

一文读懂循环神经网络(RNN)—语言模型+n元语法(1)

目录 什么是语言模型&#xff1f; 语言模型的核心目的 一.量化文本的合理性 二.支持下游 NLP 任务 三. 语义和上下文依赖 一元语法、二元语法和三元语法详解 核心概念&#xff1a;n-gram 模型 1. 一元语法&#xff08;Unigram&#xff09; 2. 二元语法&#xff08;Bigram…

DirectX12(D3D12)基础教程九 间接绘制

在学习directx12 microsoft提供了很多示例&#xff0c;有简单的也有复杂,下载网址&#xff1a;https://github.com/microsoft/DirectX-Graphics-Samples 本章对D3D12ExecuteIndirect 示例做了简化&#xff0c;只保留间接绘制部分&#xff0c;删除了计算着色器部分。 间接绘制…