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

LeetCode 每日一题 2024/9/2-2024/9/8

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


目录

      • 9/2 3153. 所有数对中数位不同之和
      • 9/3 2708. 一个小组的最大实力值
      • 9/4 2860. 让所有学生保持开心的分组方法数
      • 9/5 3174. 清除数字
      • 9/6 3176. 求出最长好子序列 I
      • 9/7 3177. 求出最长好子序列 II
      • 9/8


9/2 3153. 所有数对中数位不同之和

依次统计每一位上所有数值的个数
n=len(nums)
如果数值x出现m次 那么有n-m种情况会出现该位是不同的
累加最后因为重复计算除以二

def sumDigitDifferences(nums):""":type nums: List[int]:rtype: int"""n=len(nums)ans = 0while nums[0]>0:m = [0]*10for i in range(n):m[nums[i]%10]+=1nums[i]//=10for x in range(10):ans += (n-m[x])*m[x]return ans//2

9/3 2708. 一个小组的最大实力值

乘积最大选择所有正数 和偶数个负数
从小到大排列 将所有非零数都相乘 记录最接近0的负数preneg
如果最终答案为负 除以preneg

def maxStrength(nums):""":type nums: List[int]:rtype: int"""nums.sort()preneg = 0neg = 0pos = 0zero = 0ans = 0 for num in nums:if num<0:neg += 1preneg = numelif num==0:zero+=1continueelse:pos+=1if ans==0:ans = numelse:ans *= numif neg==1 and pos==0:if zero>0:return 0else:return ansreturn ans if ans>=0 else ans//preneg

9/4 2860. 让所有学生保持开心的分组方法数

选中的人nums尽可能小 将nums从小到大排序
如果选中k个 需要满足nums[k-1]<k nums[k]>k

def countWays(nums):""":type nums: List[int]:rtype: int"""n=len(nums)ans = 0nums.sort()for k in range(n+1):if k>0 and nums[k-1]>=k:continueif k<n and nums[k]<=k:continueans+=1return ans

9/5 3174. 清除数字

栈 遇到数字弹出顶部字符

def clearDigits(s):""":type s: str:rtype: str"""st = []for c in s:if c.isdigit():st.pop()else:st.append(c)return ''.join(st)

9/6 3176. 求出最长好子序列 I

dp[i][j] 表示以nums[i]结尾的最长序列中有j个数字与最后一个数字不同

def maximumLength(nums, k):""":type nums: List[int]:type k: int:rtype: int"""n=len(nums)ans = 0dp = [[-1]*51 for _ in range(n)]for i in range(n):dp[i][0]=1for l in range(k+1):for j in range(i):add = 0if nums[i]!=nums[j]:add = 1if l-add>=0 and dp[j][l-add]!=-1:dp[i][l] = max(dp[i][l],dp[j][l-add]+1)ans = max(ans,dp[i][l])return ans

9/7 3177. 求出最长好子序列 II

dp[i][j]表示以nums[i]结尾
有j个数字与其在序列中的后一个数字不相等的最长合法序列的长度
枚举x<i 如果nums[x]=nums[i] dp[i][j]=max(dp[x][j]+1)
否则dp[i][j]=max(dp[x][j-1]+1)
zd[j] 表示到位置i之前 有j个数与后一个不等的最长序列长度
即dp[i][j]=max(zd[j]+1)

def maximumLength(nums, k):""":type nums: List[int]:type k: int:rtype: int"""from collections import defaultdictdp=defaultdict(lambda:[0]*(k+1))zd=[0]*(k+1)for num in nums:tmp = dp[num]for j in range(k+1):tmp[j]+=1if j>0:tmp[j]=max(tmp[j],zd[j-1]+1)for j in range(k+1):zd[j]=max(zd[j],tmp[j])return zd[k]

9/8


http://www.lryc.cn/news/432113.html

相关文章:

  • Linux中的Vim文本编辑器
  • rancher搭建k8s及jenkins自动化部署
  • vue el-dialog嵌套解决无法点击问题
  • c# c++程序 交互
  • 解决ruoyi框架中使用pagehelper插件分页查询后对数据进行对象转换后失效问题
  • RabbitMQ 应用
  • 使用Python读取Excel数据的详细指南
  • VitePress 动态路由与路径加载器详解
  • C#编程语言及.NET 平台快速入门指南
  • 高等代数精解【9】
  • 谷粒商城の缓存篇
  • 永远学习:为什么人工智能难以适应新挑战
  • 【spring】 Jackson :@JsonIgnore 注解
  • Dependencies与DependencyManagement的区别
  • git svn 日记
  • FSMC
  • NAT技术+代理服务器+内网穿透
  • 【ABAP】ole2 excel多sheet导入导出
  • 图像配准-小结
  • 【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)
  • 计算机基础知识-2
  • Ubuntu2204配置连续失败后账户锁定
  • windows下安装elasticSearch和kibana
  • Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379
  • WEB服务与虚拟主机/IIS中间件部署
  • JAVA开源项目 图书个性化推荐系统 计算机毕业设计
  • Spring Boot 注解探秘:HTTP 请求的魅力之旅
  • TYPE-C USB设计
  • Python炒股自动化,怎样理解股票交易性质
  • Vue2 day-02