LeetCode:第302场周赛【总结】

2023-11-05

这场比赛用C++写了两个题,在赛后用python补题收获很多,学习了一些python的内置函数。方法学习源于其他优秀的博主。

6120. 数组能形成多少数对(A题)

在这里插入图片描述

思路

方法一:我自己写的算法,先对nums排序,之后遍历数组找相邻的位置是否相同。
方法二:统计每个数出现的次数nums,然后将nums除以2再累加得到,就是求的第一个答案,未匹配的用nums的长度减去匹配对数的两倍即可。

代码

class Solution:
    def numberOfPairs(self, nums: List[int]) -> List[int]:
        cnt = Counter(nums)
        pairs = sum(num // 2 for num in cnt.values())
        return [pairs, len(nums) - pairs * 2]

6164. 数位和相等数对的最大和(B题)

在这里插入图片描述

思路

1.按数位分组,键存数位和,值存本身
2.用大根堆来维护前两大的数

代码

class Solution:
    def maximumSum(self, nums: List[int]) -> int:
        groups = defaultdict(list)
        for num in nums:
            s = 0
            n = num
            while n:
                s += n % 10
                n //= 10
            if len(groups[s]) < 2 :
                heappush(groups[s], num)
            else:
                heappushpop(groups[s], num) # 先弹出压入
        ans = -1
        for g in groups.values():
            if len(g) > 1:
                ans = max(ans, g[-1] + g[-2])
        return ans

6121. 裁剪数字后查询第 K 小的数字(C题)

在这里插入图片描述
在这里插入图片描述

思路

利用基数排序的原理进行排序。
首先我们要用到zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
然后用zip函数将nums和queries数组的下标存起来,进行排序,这里一定要用sorted稳定的排序。
然后用基数排序的思想先对queries的trim进行排序,nums从最后一列开始进行排序,然后找到对应的trim,再取第k小的数的下表。
最后将这些下标存到ans数组中返回。

代码

class Solution:
    def smallestTrimmedNumbers(self, nums: List[str], queries: List[List[int]]) -> List[int]:
        # 
        qs = sorted(zip(queries, range(len(queries))), key=lambda q: q[0][1]) # 按照二维数组的列进行排序
        a = sorted(zip(nums, range(len(nums))), key=lambda t: t[0][-1]) # 按照最后一个字符排序
        j = 2 # j记录当前排到字符串第几列
        ans = [0] * len(queries) # 定义一个答案数组
        for (k, trim),i in qs:
            while j <= trim: # 排到第trim个
                a.sort(key=lambda t:t[0][-j]) # 对倒数第j列进行排序
                j += 1 # 再下一趟
            ans[i] = a[k - 1][1] # 记录排序后的第k小的下标
        return ans

6122. 使数组可以被整除的最少删除次数(D题)

在这里插入图片描述

思路

先求numsDivide的最大公约数g,然后在nums中找到最小的能被g整除的数,记录下来,删除的个数就是nums中比g小的数。
这里要用到reduce函数,reduce函数,将第一个集合中的前两个运算,然后再将运算结果与第三个进行运算。

代码

class Solution:
    def minOperations(self, nums: List[int], numsDivide: List[int]) -> int:
        g = reduce(gcd, numsDivide)
        mn = min((num for num in nums if g % num == 0), default = 0)
        if mn == 0:
            return -1
        return sum(num < mn for num in nums)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode:第302场周赛【总结】 的相关文章

随机推荐

  • (解决方案) node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found (node required by node)

    您可能会遇到安装在 ubuntu 操作系统上的 NodeJS 问题 当您运行 node v或pm2 list 命令时出现错误 node lib x86 64 linux gnu libc so 6 version GLIBC 2 28 no
  • 编写shell脚本实现tomcat定时重启的方法

    我的环境是 centos 7 1 在某个目录新建一个 sh 脚本文件 一般cron安装在var spool cron这里 于是我就将脚本创建在这 vim var spool cron tomcatStart sh 2 在 tomcatSta
  • 数据结构复习总结

    第一章 绪论 这里介绍了数据结构的基本概念和术语 以及算法和算法时间复杂度的分析方法 主要内容如下 1 数据结构是一门研究非数值计算程序设计中操作对象 以及这些对象之间的关系和操作的学科 2 数据结构包括两个方面的内容 数据的逻辑结构和存储
  • 挖矿kdevtmpfsi病毒处理

    通过top命令可以看到kdevtmpfsi导致CPU 700 多 导致该病毒只要是通过redis漏洞进来的 1 该病毒还有守护进程 如果光kill掉该病毒 过段时间又起来的 守护进程 kinsing 2 该病毒还有定时任务 如果光杀死kde
  • android中实现登录功能实现原理,用一个最简单的登录例子来了解Android的MVC和MVP架构的原理和实现...

    在目前的Android开发中 MVP与MVC架构还有MVVM都非常流行 三者在不同的场景下都有各自的优势和劣势 一般而言会根据具体的业务场景来选择不同的模式 所以并不是说开发一个App一定完全遵循那种模式 完全可以根据业务场景不同混合多种模
  • 书写中断服务函数的时候注意的问题:

    书写中断服务函数的时候注意的问题 1 中断服务函数名尽量用复制 不要自己写 因为只要你写错一个字母 这个函数就变成普通函数了 2 如果中断服务函数是公共入口 进入到中断服务函数后先要查询是哪种中断 3 先清中断标志 然后再做中断处理 不要把
  • python项目之弹球小游戏 2

    Hello 大家好 我们又见面了 本来我是想再拖几天再发布的 可我的良心不允许我这么做 毕竟在 python项目之弹球小游戏 1 中我们只是写了窗口的程序 还没有加入我们的主题元素呢 所以今天 我们就来加入 小球 这个关键因素 小球的图片素
  • Android 获取apk中的所有类

    直接把下面代码放到工具类调用即可 import android content Context import android os Build import android util Log import com duole games s
  • vue移动端适配(px转vw)postcss-px-to-viewport配置

    安装postcss px to viewport npm install postcss px to viewport 根目录新建postcss config js文件 postcss config js文件 module exports
  • FPGA自学之路4(按键消抖)

    先看框图 按键消抖意思就是前面和后面会有一系列信号抖动 中间才是我们要的信号 这里预设中间需要的信号 gt 20ms 用计数器计数 key in低电平就开始计数 高电平就清零 等计数器能计数到M 1 20ms 时输出一个高电平 这个按键消抖
  • Windows在线安装Qt5.15.2教程、Qt组件模块选择

    1 Qt5 15 2安装包 https download qt io 从archive qt里选 2 Qt5 15 2在线安装教程 https blog csdn net Qi 1337 article details 121249717
  • 关于:Error:java:java.lang.ExceptionInInitializerError 问题的解决

    本地运行项目的时候报上面错误 原因是jdk版本过高导致 解决方法步骤如下 idea 1 点击 File Project Structrue 2 把这两个圈起来的选项改成如下 3 保存 再次运行问题解决
  • 冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序六大排序详解

    1 冒泡排序 思路 左右相邻的两个数互相比较 大的交换到序列后边 每次遍历排出剩余的最大的数 如下图所示 代码如下 void BubbleSort int a int n n为数组元素个数 int i 0 j 0 for i 0 i lt
  • 【已解决】No qualifying bean of type ‘service.Service‘ available

    Exception in thread main org springframework beans factory NoSuchBeanDefinitionException No qualifying bean of type serv
  • MySql优化实战案例

    文章目录 建立测试表 联合索引第一个字段用范围不走索引 覆盖索引优化 in和or在表数据量比较大的情况会走索引 在表记录不多的情况下会选择全表扫描 like KK 一般情况都会走索引 Order by 和 group by优化 Order
  • [LeetCode] Valid Anagram - 字符串排序比较系列

    题目概述 Given two strings s and t write a function to determine if t is an anagram of s For example s anagram t nagaram ret
  • Matplotlib:Adding an axes using the same arguments as a previous axes

    学习 机器学习实战 kNN时 在使用Matplotlib画图时 发现了一个Warining MatplotlibDeprecationWarning Adding an axes using the same arguments as a
  • discuz手机端修改url

    discuz的站需要做伪静态 修改url 本来是直接在最外层用ob函数来替换 pc端的可以 但是这个方法用在手机端的时候 发现失效 后来发现是手机端的php文件使用了函数清空了缓存 ob end clean source class hel
  • python随机性实验

    20210408 0 引言 在另外一篇文章中说明了在使用深度学习库的时候 实验结果的可复现的属性 深度学习实验结果可复现所需设置 随机数等内容设置 文中提到 如果是用GPU加速的话 那么很可能导致实验无法复现 那么就只能使用CPU 好在手里
  • LeetCode:第302场周赛【总结】

    这场比赛用C 写了两个题 在赛后用python补题收获很多 学习了一些python的内置函数 方法学习源于其他优秀的博主 6120 数组能形成多少数对 A题 思路 方法一 我自己写的算法 先对nums排序 之后遍历数组找相邻的位置是否相同