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

LeetCode 每日一题 2025/5/19-2025/5/25

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


目录

      • 5/19 3024. 三角形类型
      • 5/20 3355. 零数组变换 I
      • 5/21 3356. 零数组变换 II
      • 5/22 3362. 零数组变换 III
      • 5/23 3068. 最大节点价值之和
      • 5/24 2942. 查找包含给定字符的单词
      • 5/25 2131. 连接两字母单词得到的最长回文串


5/19 3024. 三角形类型

三条边从小到大排序 判断

def triangleType(nums):""":type nums: List[int]:rtype: str"""nums.sort()if nums[0]+nums[1]<=nums[2]:return "none"if nums[0]==nums[2]:return "equilateral"elif nums[1]==nums[0] or nums[1]==nums[2]:return "isosceles"else:return "scalene"

5/20 3355. 零数组变换 I

将所有queries中的数都+1得到cur nums所有数不大于cur既满足
change[i]记录从左到右的cur在此处的变动

def isZeroArray(nums, queries):""":type nums: List[int]:type queries: List[List[int]]:rtype: bool"""change={}for v in queries:l,r=v[0],v[1]change[l]=change.get(l,0)+1change[r+1]=change.get(r+1,0)-1cur=0for i in range(len(nums)):if i in change:cur+=change[i]if cur<nums[i]:return Falsereturn True

5/21 3356. 零数组变换 II

依次进行操作
并从左往右判断nums当前位置是否可以归零
如果可以 则继续在nums往右
如果不可以 则需要继续操作queries往右

def minZeroArray(nums, queries):""":type nums: List[int]:type queries: List[List[int]]:rtype: int"""n=len(nums)change={}k=0cur=0for i in range(n):num=nums[i]cur += change.get(i,0)while k<len(queries) and cur<num:l,r,v=queries[k]change[l]=change.get(l,0)+vchange[r+1]=change.get(r+1,0)-vif l<=i<=r:cur+=vk+=1if cur<num:return -1return k

5/22 3362. 零数组变换 III

从左往右考虑nums 将queries根据起始点排序
对于nums[i] 优先选取nums[i]在query中并且右端点更靠后的
用最大堆存放待选query

def maxRemoval(nums, queries):""":type nums: List[int]:type queries: List[List[int]]:rtype: int"""import heapqqueries.sort(key=lambda x:x[0])h=[]change={}j=0cur=0for i,num in enumerate(nums):cur+=change.get(i,0)while j<len(queries) and queries[j][0]==i:heapq.heappush(h, -queries[j][1])j+=1while cur<num and h and -h[0]>=i:cur+=1v=-heapq.heappop(h)+1change[v] = change.get(v,0)-1if cur<num:return -1return len(h)

5/23 3068. 最大节点价值之和

根据异或的性质 如果异或偶数次则值不变
对于树上的任意两个节点 将联通他们的边都进行一次操作
那么除了开始和结束的点 中间节点都被异或两次 值不变
所以可以异或任意两个点的值
将所有点操作后增加的值从大到小排序
每次选择最大的两个值 如果大于零则可以操作

def maximumValueSum(nums, k, edges):""":type nums: List[int]:type k: int:type edges: List[List[int]]:rtype: int"""ans=sum(nums)diff = [(x^k)-x for x in nums]diff.sort(reverse=True)i=0while i<len(nums)-1 and diff[i]+diff[i+1]>0:ans += diff[i]+diff[i+1]i+=2return ans

5/24 2942. 查找包含给定字符的单词

依次判断

def findWordsContaining(words, x):""":type words: List[str]:type x: str:rtype: List[int]"""ans=[]for i,w in enumerate(words):if x in w:ans.append(i)return ans

5/25 2131. 连接两字母单词得到的最长回文串

统计单词出现次数
如果反转后一致则判断是否是奇数个 奇数个可以由中心单词

def longestPalindrome(words):""":type words: List[str]:rtype: int"""from collections import Counter fre=Counter(words)mid=0ans=0for w,cnt in fre.items():rev = w[1]+w[0]if w==rev:if cnt%2==1:mid=1ans+=2*(cnt//2*2)elif w>rev:ans+=4*min(fre[w],fre[rev])return ans+2 if mid else ans

相关文章:

  • 每日算法刷题计划Day15 5.25:leetcode不定长滑动窗口求子数组个数越短越合法3道题,用时1h
  • python 实现从座位图中识别不同颜色和数量的座位并以JSON格式输出的功能
  • GO 语言基础3 struct 结构体
  • C++ 定义一个结构体,用class还是struct
  • day 36
  • 自定义 win10 命令
  • 人工智能数学基础实验(四):最大似然估计的-AI 模型训练与参数优化
  • 人工智能数学基础实验(五):牛顿优化法-电动汽车充电站选址优化
  • Pandas数据规整
  • Autodl训练Faster-RCNN网络--自己的数据集(二)
  • C++虚函数与类对象模型深度解析
  • binlog 解析工具——my2sql
  • 使用JSP踩过的坑
  • Double使用注意事项
  • 【编程实践】利用open3d对点云进行聚类并可视化
  • Kotlin IR编译器插件开发指南
  • 互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计
  • Eigen 库实现最小二乘算法(Least Squares)
  • Unity基础学习(九)Resources资源同步与异步加载
  • 如何在 Linux 系统中永久禁用交换分区 ?
  • 网站开发有哪些软件/郑州seo线上推广技术
  • 网站好坏标准/外贸快车
  • 怎么做网站不用备案/搜狗搜索网
  • 购物网站建设流程/专业的网页制作公司
  • 外贸网站建设费用一般要多少/百度搜索推广平台
  • 免费h5网站模版/成人企业管理培训课程