[LeetCode周赛复盘] 第 376 场周赛20231217

news2024/11/24 8:57:52

[LeetCode周赛复盘] 第 376 场周赛20231217

    • 一、本周周赛总结
    • 100149. 找出缺失和重复的数字![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/347f99d7222f4b8a9c9b14fdff240e4d.png)
      • 2. 思路分析
      • 3. 代码实现
    • 100161. 划分数组并满足最大差限制
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 100151. 使数组成为等数数组的最小代价
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 100123. 执行操作使频率分数最大
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • 原题我调了半天,太傻了。。
  • T1 模拟。
  • T2 捞币翻译,排序贪心模拟。
  • T3 中位数定理+模拟/二分。
  • T4 中位数定理+滑窗。

100149. 找出缺失和重复的数字在这里插入图片描述

2. 思路分析

按题意模拟即可。

3. 代码实现

class Solution:
    def findMissingAndRepeatedValues(self, grid: List[List[int]]) -> List[int]:
        n = len(grid)
        b = set(range(1,n*n+1))
        cnt = Counter()
        for row in grid:
            for v in row:
                b.discard(v)
                cnt[v]+=1
                if cnt[v] == 2:
                    a = v
        return [a, b.pop()]

100161. 划分数组并满足最大差限制

100161. 划分数组并满足最大差限制

1. 题目描述

在这里插入图片描述

2. 思路分析

翻译害人不浅,根本就不是子数组,原文是Divide the array into one or more arrays of size 3 satisfying the following conditions:

  • 其实是分组,不要求连续,类似与子序列但可以重排。
  • 那么排序贪心模拟即可,相邻的三个必须同组。

3. 代码实现

class Solution:
    def divideArray(self, nums: List[int], k: int) -> List[List[int]]:
        nums.sort()
        ret = []
        for i in range(0, len(nums), 3):
            if nums[i + 2] - nums[i] > k:
                return []
            ret.append(nums[i:i + 3])
        return ret

100151. 使数组成为等数数组的最小代价

100151. 使数组成为等数数组的最小代价

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 中位数定理。要让数组里的数都变成同一个数,总距离最小,那么就是变成中位数。
  • 显然可以找到离中位数最近的那个回文数即可。
  • 题目限制<1e9才是中位数,因此我们可以枚举中位数的一半,打表预处理所有中位数。然后在这个表里二分。

  • 另外,由于两个回文数间距最大只有1e4级别,其实可以直接从中位数开始暴力向两边扩展。

3. 代码实现

biao=list(range(1,10))
for i in range(10**4):
    s = str(i)
    p = int(s + s[::-1])
    if p < 10**9:
        biao.append(p)
    for j in range(10):
        p = int(s +str(j)+ s[::-1])
        if p < 10**9:
            biao.append(p)
biao = sorted(set(biao))

class Solution:
    def minimumCost(self, nums: List[int]) -> int:
        n = len(nums)
        nums.sort()
        
        pre = [0] + list(accumulate(nums))
        def f(x):
            p = bisect_left(nums,x)
            s = 0
            if p > 0:
                s += x*p - pre[p-1+1] + pre[0] 
            if p < n:
                s += pre[n] - pre[p] - x*(n-p)
            return s 
        ans = inf
        p = bisect_left(biao,nums[(n-1)//2])
        if p:
            ans = f(biao[p-1])
        if p < len(biao):
            ans = min(ans,f(biao[p]))
        return ans        
class Solution {
    public int[][] divideArray(int[] nums, int k) {
        Arrays.sort(nums);
        List<int[]> ret = new ArrayList<>();

        for (int i = 0; i < nums.length; i += 3) {
            if (i + 2 < nums.length && nums[i + 2] - nums[i] > k) {
                return new int[][]{}; 
            }

            int[] subArray = Arrays.copyOfRange(nums, i, Math.min(i + 3, nums.length));
            ret.add(subArray);
        }

        return ret.toArray(new int[0][]);
    }
}

100123. 执行操作使频率分数最大

[100123. 执行操作使频率分数最大在这里插入图片描述

2. 思路分析

  • 我可真菜啊,华子原题调这半天。
  • 应用中位数定理+滑窗。
  • 枚举右端点,左端点向左不合法的情况下,下一个右端点也必不合法,左端点可以右移。

3. 代码实现

class Solution:
    def maxFrequencyScore(self, nums: List[int], k: int) -> int:
        if k == 0:
            return max(Counter(nums).values())
        nums.sort()
        pre = [0] + list(accumulate(nums))
        n = len(nums)
        def f(l,r):
            mid = (l+r)//2
            p = nums[mid]*(mid-l+1) - (pre[mid+1] - pre[l])   + pre[r+1] - pre[mid] - nums[mid] * (r-mid+1)            
            return p <= k
        l = ans = 0
        for r in range(n):
            while not f(l,r):
                
                l += 1
            ans = max(ans, r - l + 1)
        return ans    

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1317357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode刷题-树】--173.二叉搜索树迭代器

173.二叉搜索树迭代器 本题就是实现二叉树的中序遍历&#xff0c;利用数组本身实现迭代器 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.va…

JSON Ajax

1. JSON概念 JSON&#xff0c;全称JavaScript Object Notation&#xff0c;即JavaScript对象表示法&#xff0c;是一种轻量级的数据交换格式。它基于JavaScript的子集&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。 JSON的诞生&#xff0c;是为了解决电…

关于“Python”的核心知识点整理大全24

目录 ​编辑 10.1.6 包含一百万位的大型文件 pi_string.py 10.1.7 圆周率值中包含你的生日吗 10.2 写入文件 10.2.1 写入空文件 write_message.py programming.txt 10.2.2 写入多行 10.2.3 附加到文件 write_message.py programming.txt 10.3 异常 10.3.1 处理 Ze…

python装饰器理解

这篇文章记录了对python装饰器的理解&#xff0c;主要参考了文章【Python】一文弄懂python装饰器&#xff08;附源码例子&#xff09;&#xff0c;大部分内容是直接转载的&#xff0c;然后根据自己的理解多加了一些解释说明。 python装饰器理解 1 装饰器2 使用装饰器的动机3 简…

解决报错:ModuleNotFoundError: No module named ‘timm.optim.novograd‘ 的办法,亲测有效

问题 在尝试运行文件的时候&#xff0c;有这样的引用 from timm.optim.novograd import NovoGrad 总是报错&#xff01;&#xff01;&#xff01; 解决办法 试过 更新timm &#xff1a; pip install --upgrade timm 试过换一种引用方式 from timm.optim import NovoGra…

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译 1、下载Jetson BSP包和交叉编译环境 地址&#xff1a;https://developer.nvidia.com/embedded/jetson-linux-archive下载需要版本即可&#xff0c;此次编译采用32.4.2版本 需要下载的文件如下&#xff1a; 2、新建一个文件…

简历提示:如何撰写出色的简历

您的简历可能是您一生中写的最重要的一页。遵循我们的 20 条简历写作技巧&#xff0c;让您的简历取得成功。 您知道一份出色的简历的重要性。这是您获得一份好工作所需的文件&#xff0c;而一份好工作可以带来美好的生活。因此&#xff0c;我们整理了 20 个简历技巧来帮助您撰…

JWT知识

JWT概念 JWT组成 Java实现JWT Header String getHeader() {String header "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";String encodeBase64URLSafeString Base64.encodeBase64URLSafeString(header.getBytes(StandardCharset…

Python数据科学视频讲解:Python字典

2.13 Python字典 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.13节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科学应用…

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICE…

关联规则分析和相关系数

在第三讲 我们说过了一个皮尔森系数的计算公式 然后在第八讲 我们又看到了一个类似的式子。 这个是属于相关分析的范畴

GZ015 机器人系统集成应用技术样题5-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题5 选手须知&#xff1a; 本任务书共 24页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

玩转Docker(五):网络

文章目录 〇、关于linux系统网络一、none网络二、host网络三、bridge网络四、user-defined网络 Docker安装时会自动在host上创建三个网络&#xff0c;我们可用docker network ls命令查看&#xff1a; docker network ls那么这几种网络分别有什么含义呢&#xff1f;在回答这个问…

OpenTiny Vue 组件库3.12.0 发布:文档大优化!增加水印和二维码两个新组件

非常高兴跟大家宣布&#xff0c;2023年11月30日&#xff0c;OpenTiny Vue 发布了 v3.12.0 &#x1f389;。 OpenTiny 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;10.24 我们发布了 v3.11.0 版本&#xff0c;增加了富文本、ColorPicker 等4个新组件…

Python数据科学视频讲解:Python数据清洗基础

3.1 Python数据清洗基础 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解3.1节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科…

Android : 序列化 Parcelable 简单应用

1.Parcelable 介绍 Parcelable 是 Android 提供的一个序列化接口&#xff0c;用于将数据写入 Parcel&#xff0c;以及从 Parcel 中读取数据。一个类只要实现了这个接口&#xff0c;该类的对象就可以被序列化&#xff0c;主要用于 IPC&#xff08;进程间通信&#xff09;、Bind…

在Windows上通过VS2019自带的Cmake来编译OpenCV-4.5.3源码

文章目录 用VS打开OpenCV源码cmake的配置及生成操作生成及安装 用VS打开OpenCV源码 方式一&#xff1a;文件–》打开–》Cmake 找到源码根目录下CMakeLists.txt文件 导入即可。 方式二&#xff1a;在开始使用这里 选择 打开本地文件夹 找到源码的根目录&#xff0c;导入即可…

黑马点评06分布式锁 2Redisson

实战篇-17.分布式锁-Redisson功能介绍_哔哩哔哩_bilibili 1.还存在的问题 直接实现很麻烦&#xff0c;借鉴已有的框架。 2.Redisson用法 3.Redisson可重入原理 在获取锁的时候&#xff0c;看看申请的线程和拿锁的线程是否一致&#xff0c;然后计算该线程获取锁的次数。一个方法…

单链表详解(附图解,结尾附全部源码)

下面开始带大家对单链表的增删查改进行图解 首先给大家介绍一下链表 链表就是每一个结构体中包含一个数据和一个结构体指针&#xff0c;这个指针就相当于锁链的作用将下一个结构体给锁住&#xff0c;但是每个结构体的空间是相对独立的。 图解&#xff1a; 1 首先实现尾插 如果…

XSS漏洞 深度解析 XSS_labs靶场

XSS漏洞 深度解析 XSS_labs靶场 0x01 简介 XSS原名为Cross-site Sciprting(跨站脚本攻击)&#xff0c;因简写与层叠样式表(Cascading style sheets)重名&#xff0c;为了区分所以取名为XSS。 这个漏洞主要存在于HTML页面中进行动态渲染输出的参数中&#xff0c;利用了脚本语…