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

LeetCode 每日一题 2024/9/23-2024/9/29

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


目录

      • 9/23 2414. 最长的字母序连续子字符串的长度
      • 9/24 2207. 字符串中最多数目的子序列
      • 9/25 2306. 公司命名
      • 9/26 2535. 数组元素和与数字和的绝对差
      • 9/27 2516. 每种字符至少取 K 个
      • 9/28 2286. 以组为单位订音乐会的门票
      • 9/29 2073. 买票需要的时间


9/23 2414. 最长的字母序连续子字符串的长度

依次遍历 cur记录当前满足条件的字符串长度
如果当前字符s[i]比前一个字符字母序大1则满足条件 cur+1

def longestContinuousSubstring(s):""":type s: str:rtype: int"""ans = 1cur = 1for i in range(1,len(s)):if ord(s[i])-ord(s[i-1])==1:cur+=1else:cur=1ans=max(ans,cur)return ans

9/24 2207. 字符串中最多数目的子序列

为了使得增加一个字符增加的子序列最多
pattern[0]加在开头 pattern[1]加在结尾
从头遍历 统计pattern[0],[1]出现次数p0.p1
遇到pattern[1] 说明该字符可以与前边的pattern[0]组合成p0个子序列
最后 哪个多那就添加另外一个字符 增加max(p0,p1)个子序列

def maximumSubsequenceCount(text, pattern):""":type text: str:type pattern: str:rtype: int"""p0,p1=0,0ans =0for c in text:if c==pattern[1]:ans += p0p1+=1if c==pattern[0]:p0+=1return ans+max(p0,p1)

9/25 2306. 公司命名

首字母相同的公司必定不满足条件
按首字母将idea分类
m[h]存储以字母h为首字母的剩余字符
遍历所有首字母
h1,h2中有后续字符序列s1,s2
只有不在s1,s2交集中的序列才可以相互组合
(s1-s1&s2)*(s2-s1&s2)

def distinctNames(ideas):""":type ideas: List[str]:rtype: int"""from collections import defaultdictm = defaultdict(set)for s in ideas:m[s[0]].add(s[1:])ans = 0for h1,s1 in m.items():for h2,s2 in m.items():if h1==h2:continuesame = len(s1&s2)ans +=(len(s1)-same)*(len(s2)-same)return ans

9/26 2535. 数组元素和与数字和的绝对差

依次求出元素和 数字和

def differenceOfSum(nums):""":type nums: List[int]:rtype: int"""s0=0s1=0for num in nums:s0+=numwhile num:s1+=num%10num//=10return s0-s1

9/27 2516. 每种字符至少取 K 个

取走左右两侧 中间部分必定是连续的
可以用双指针考虑中间部分区间
中间部分越长 则取走的次数越少

def takeCharacters(s, k):""":type s: str:type k: int:rtype: int"""n=len(s)if n<3*k:return -1cnt={'a':0,'b':0,'c':0}for c in s:cnt[c]+=1if cnt['a']<k or cnt['b']<k or cnt['c']<k:return -1ans = len(s)l = 0for r,c in enumerate(s):cnt[c]-=1while l<r and (cnt['a']<k or cnt['b']<k or cnt['c']<k):cnt[s[l]]+=1l+=1if cnt['a']>=k and cnt['b']>=k and cnt['c']>=k:ans = min(ans,n-(r-l+1))return ans

9/28 2286. 以组为单位订音乐会的门票

线段树minT,sumT记录区间[l,r]排之间 每一排最小已坐位置 和 已坐位置数之和
见题解https://leetcode.cn/problems/booking-concert-tickets-in-groups/solutions/2930664/yi-zu-wei-dan-wei-ding-yin-le-hui-de-men-ay7o

class BookMyShow(object):def __init__(self, n, m):""":type n: int:type m: int"""self.n = nself.m = mself.minT = [0]*(4*n)self.sumT = [0]*(4*n)def modify(self,i,l,r,ind,val):if l==r:self.minT[i]=valself.sumT[i]=valreturnmid=(l+r)//2if ind<=mid:self.modify(i*2,l,mid,ind,val)else:self.modify(i*2+1, mid+1, r, ind, val)self.minT[i]=min(self.minT[i*2],self.minT[i*2+1])self.sumT[i]=self.sumT[i*2]+self.sumT[i*2+1]def queryMin(self,i,l,r,val):if l==r:return l if self.minT[i]<=val else self.nmid = (l+r)//2if self.minT[i*2]<=val:return self.queryMin(i*2,l,mid,val)else:return self.queryMin(i*2+1,mid+1,r,val)def querySum(self,i,l,r,l2,r2):if l2<=l and r<=r2:return self.sumT[i]mid=(l+r)//2s=0if mid>=l2:s+=self.querySum(i*2, l, mid, l2, r2)if mid+1<=r2:s+=self.querySum(i*2+1, mid+1, r, l2, r2)return sdef gather(self, k, maxRow):""":type k: int:type maxRow: int:rtype: List[int]"""i = self.queryMin(1, 0, self.n-1, self.m-k)if i>maxRow:return []used = self.querySum(1, 0, self.n-1, i, i)self.modify(1, 0, self.n-1, i, used+k)return [i,used]def scatter(self, k, maxRow):""":type k: int:type maxRow: int:rtype: bool"""total = self.querySum(1, 0, self.n-1, 0, maxRow)if (maxRow+1)*self.m-total<k:return Falsei = self.queryMin(1, 0, self.n-1, self.m-1)while True:used = self.querySum(1, 0, self.n-1, i, i)if self.m-used>=k:self.modify(1, 0, self.n-1, i, used+k)breakk-=self.m-usedself.modify(1, 0, self.n-1, i, self.m)i+=1return True

9/29 2073. 买票需要的时间

从头遍历
假设位置k需要买num张票
对于位置k前的人 必定买完或者最多买num张票
对于k后的人 买完或者最多买num-1张票

def timeRequiredToBuy(tickets, k):""":type tickets: List[int]:type k: int:rtype: int"""num=tickets[k]ans = numfor i in range(k):ans += min(tickets[i],num)for i in range(k+1,len(tickets)):ans += min(tickets[i],num-1)return ans

相关文章:

  • 计算机毕业设计 基于Python国潮男装微博评论数据分析系统的设计与实现 Django+Vue 前后端分离 附源码 讲解 文档
  • 基于Node.js+Express+MySQL+VUE新闻网站管理系统的设计与实现
  • React学习笔记(四)——React 组件生命周期
  • 负载均衡(Load Balancing)是一种计算机技术,用于在网络应用中分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间以及避免过载。
  • 【源码+文档+调试讲解】智能校园点餐管理系统springboot
  • 物联网系统中高精度压力检测方案_压力变送器
  • 15分钟学 Python 第29天 : 数据库基础
  • “不关心⚠️Warning”的代价:http自动升级https导致免费的存储服务扣费
  • 磁盘管理器
  • 多表查询。
  • 在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1)
  • 基于单片机电容测量仪仿真设计
  • go语言实现新增代码单测覆盖率
  • Qt 智能指针
  • 探索 DaPy:Python 中的 AI 数据处理新贵
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译]如何构建服务器端web组件,为何要构建?
  • CSS魔法堂:Absolute Positioning就这个样
  • docker-consul
  • emacs初体验
  • es6要点
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HomeBrew常规使用教程
  • input实现文字超出省略号功能
  • JavaScript异步流程控制的前世今生
  • Netty 4.1 源代码学习:线程模型
  • React组件设计模式(一)
  • Ruby 2.x 源代码分析:扩展 概述
  • 大主子表关联的性能优化方法
  • 多线程事务回滚
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 和 || 运算
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 扑朔迷离的属性和特性【彻底弄清】
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微服务核心架构梳理
  •  一套莫尔斯电报听写、翻译系统
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Prometheus VS InfluxDB
  • #数据结构 笔记一
  • (152)时序收敛--->(02)时序收敛二
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (LeetCode C++)盛最多水的容器
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)hibernate配置管理
  • (二)斐波那契Fabonacci函数
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)Linux+Windows下安装ffmpeg
  • (原)本想说脏话,奈何已放下
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)ObjectiveC 深浅拷贝学习