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

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 977. 有序数组的平方


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

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

def sumDigitDifferences(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    n=len(nums)
    ans = 0
    while nums[0]>0:
        m = [0]*10
        for i in range(n):
            m[nums[i]%10]+=1
            nums[i]//=10
        for 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 = 0
    neg = 0
    pos = 0
    zero = 0
    ans = 0 
    for num in nums:
        if num<0:
            neg += 1
            preneg = num
        elif num==0:
            zero+=1
            continue
        else:
            pos+=1
        if ans==0:
            ans = num
        else:
            ans *= num
    if neg==1 and pos==0:
        if zero>0:
            return 0
        else:
            return ans
    return 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 = 0
    nums.sort()
    for k in range(n+1):
        if k>0 and nums[k-1]>=k:
            continue
        if k<n and nums[k]<=k:
            continue
        ans+=1
    return 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 = 0
    dp = [[-1]*51 for _ in range(n)]
    for i in range(n):
        dp[i][0]=1
        for l in range(k+1):
            for j in range(i):
                add = 0
                if nums[i]!=nums[j]:
                    add = 1
                if 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 defaultdict
    dp=defaultdict(lambda:[0]*(k+1))
    zd=[0]*(k+1)
    
    for num in nums:
        tmp = dp[num]
        for j in range(k+1):
            tmp[j]+=1
            if 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 977. 有序数组的平方

计算每个数平方即可

def sortedSquares(nums):
    """
    :type A: List[int]
    :rtype: List[int]
    """
    return sorted([x**2 for x in nums])




http://www.kler.cn/a/303035.html

相关文章:

  • Vue3.js - 一文看懂Vuex
  • 大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)
  • C++编程技巧与规范-类和对象
  • Thread类及常见方法
  • golang如何实现sse
  • DataWorks on EMR StarRocks,打造标准湖仓新范式
  • OpenAI gym: Trouble installing Atari dependency (Mac OS X)
  • CVE-2024-38063 ipv6远程蓝屏
  • 基于SpringBoot+Vue+MySQL的招聘管理系统
  • 【课程系列12】某客时间AI大模型微调训练营
  • C#中的可空类型和空合并运算符
  • Perfetto 如何查看主线程哪些操作最耗时
  • P1332 血色先锋队
  • 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引
  • layui复选框删除
  • 计算机毕业设计选题推荐-流浪动物领养管理系统-Java/Python项目实战(亮点:数据可视化分析、智能推荐)
  • 开发模式和环境搭建
  • Android 开发避坑经验第三篇:RecyclerView 高效使用与常见问题解决
  • centos下nvme over rdma 环境配置
  • vue原理分析(十二)研究new Vue()中的 initInjections
  • MVVM 基础
  • 计算机科学基础 -- 超流水线
  • cross-plateform 跨平台应用程序-04-React Native 介绍
  • 缓存预热/雪崩/穿透/击穿
  • 基于Python实现一个庆祝中秋节的小程序
  • C#笔记7 网络通信抽象,Socket类的介绍和简单使用