[LeetCode周赛复盘] 第 103 场双周赛20230429

news2024/12/28 21:11:34

[LeetCode周赛复盘] 第 103 场双周赛20230429

    • 一、本周周赛总结
    • 2656. K 个元素的最大和
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2657. 找到两个数组的前缀公共数组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2658. 网格图中鱼的最大数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2659. 将数组清空
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • T1 贪心等差数列求和。
  • T2 哈希表模拟。
  • T3 最大权连通分量。
  • T4 树状数组。
    在这里插入图片描述

2656. K 个元素的最大和

2656. K 个元素的最大和

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 不难看出每次都应该选最大的值。
  • 且每次更新完后最大值+1。
  • 那么最后的结果就是选k个数,从mx开始直到mx+k-1

3. 代码实现

class Solution:
    def maximizeSum(self, nums: List[int], k: int) -> int:
        mx = max(nums)
        return (mx+mx+k-1)*k // 2 

2657. 找到两个数组的前缀公共数组

2657. 找到两个数组的前缀公共数组

1. 题目描述

在这里插入图片描述

2. 思路分析

 通过样例可以看出来,公共元组不考虑下标,即跟元素顺序无关,数相同即可。
  • 当跟顺序无关时,一般考虑排序或者计数。这题显然计数更合适。
  • 由于AB都是0~n-1的排列,即不重复,那么前缀出现相同元素,则数量一定是2。
  • 那么无脑cnt,出现2就贡献一个答案即可。

3. 代码实现

class Solution:
    def findThePrefixCommonArray(self, A: List[int], B: List[int]) -> List[int]:
        cnt = Counter()
        ans = []
        s = 0
        for x,y in zip(A,B):
            cnt[x] += 1
            if cnt[x] == 2:
                s += 1
            cnt[y] += 1
            if cnt[y] == 2:
                s += 1
            ans.append(s)
        return ans 

2658. 网格图中鱼的最大数目

2658. 网格图中鱼的最大数目

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 这题放在T3还标个hard,可能是出题人摆烂了吧。
  • 200. 岛屿数量

3. 代码实现

DIRS = ((0,1),(0,-1),(1,0),(-1,0))
class Solution:
    def findMaxFish(self, g: List[List[int]]) -> int:
        m,n = len(g),len(g[0])
        def inside(x,y):
            return 0<=x<m and 0<=y<n 
        
        def bfs(x,y):
            s = g[x][y]
            if not s :
                return 0
            g[x][y] = 0 
            q = deque([(x,y)])
            while q:
                x,y = q.popleft()
                for dx,dy in DIRS:
                    a,b = x+dx,y+dy 
                    if inside(a,b) and g[a][b]:
                        s += g[a][b]
                        g[a][b] = 0
                        q.append((a,b))
            return s         
       
        return max(bfs(i,j) for i in range(m) for j in range(n)) 

2659. 将数组清空

2659. 将数组清空

1. 题目描述

在这里插入图片描述

在这里插入图片描述

2. 思路分析

  • 观察发现,数据操作过程中,大小关系相邻的元素,相对位置在循环里是不变的。
  • 那么处理完pre开始处理cur时,只需要分类讨论下标:
    • pre在cur前边,则只需要移动一下这之间的数。然后删除cur。
    • pre在cur后边,那需要移动这俩数外边的所有数。
  • 发现数字大小关系确定即可,数字值不重要。
  • 因此用树状数组维护每个下标上有几个数(初始一个,删除则-1)。
  • 然后计算两个区间内的数字数量即可。

3. 代码实现

class BinIndexTree:
    def __init__(self, size_or_nums):  # 树状数组,下标需要从1开始
        # 如果size 是数字,那就设置size和空数据;如果size是数组,那就是a
        if isinstance(size_or_nums, int):
            self.size = size_or_nums
            self.c = [0 for _ in range(self.size + 5)]
            # self.a = [0 for _ in range(self.size + 5)]
        else:
            self.size = len(size_or_nums)
            # self.a = [0 for _ in range(self.size + 5)]
            self.c = [0 for _ in range(self.size + 5)]
            for i, v in enumerate(size_or_nums):
                self.add_point(i + 1, v)

    def add_point(self, i, v):  # 单点增加,下标从1开始
        # self.a[i] += v
        while i <= self.size:
            self.c[i] += v
            i += i & -i

    def sum_interval(self, l, r):  # 区间求和,下标从1开始,计算闭区间[l,r]上的和
        return self.sum_prefix(r) - self.sum_prefix(l - 1)

    def sum_prefix(self, i):  # 前缀求和,下标从1开始
        s = 0
        while i >= 1:
            s += self.c[i]
            # i -= i&-i
            i &= i - 1
        return s   

class Solution:
    def countOperationsToEmptyArray(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        tree = BinIndexTree(n)
        for i in range(1,n+1):
            tree.add_point(i,1)
        
        p = 1
        for _,i in sorted([(v,i) for i,v in enumerate(nums,start=1)]):
            if i >= p:
                ans += tree.sum_interval(p,i)
            else:
                ans += tree.sum_prefix(i) + tree.sum_interval(p,n)
       
            tree.add_point(i,-1)
            p = i 
        return ans       

参考链接

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

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

相关文章

二分(整数二分 浮点数二分)

目录 一、整数二分 模板 右边界二分查找&#xff08;左开右闭&#xff09; 左边界二分查找&#xff08;左闭右开&#xff09; 应用 数的范围 二、浮点数的二分 模板 应用 算术平方根 三、习题 1.数的三次方根 一、整数二分 tip&#xff1a;满足单调性的数组一定可以…

【Linux】进程优先级 + 环境变量

文章目录 &#x1f4d6; 前言1. 进程优先级1.1 什么是优先级&#xff1a;1.2 如何修改优先级&#xff1a; 2. 进程的其他概念2.1 竞争性与独立性&#xff1a;2.2 并行与并发&#xff1a;2.3 进程间优先级的体现&#xff1a;2.4 O(1) 调度算法&#xff1a;2.4 进程上下文&#x…

C语言进阶——数据在内存中的存储,你知道吗?

今天我们深度剖析数据在内存中的存储&#xff1a; 重点知识&#xff1a; 1、数据类型详细介绍 2、整形在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 之前我们涉及关于这一部分的知识只是大致的进行讲解&#xff0…

网络编程:UDP socket

文章目录 阅读前导 服务端定义日志框架成员属性服务端框架 初始化服务器创建套接字绑定 运行服务端读取数据参数解读 处理数据向客户端发送响应数据关闭文件描述符 客户端定义创建套接字绑定发送数据接收服务器的响应数据关闭文件描述符 测试1本地环回作用 本地测试netstat 指令…

继续科普:ChatGPT 最新写论文使用方法

这两天发现了几个国内就能用的ChatGPT,不需要魔法! 给大家推荐两种方法,大家自行选择: 1、电脑端安装VSCode软件,使用GPT插件: 优点: 无需魔法、无需付费、软件简单易用(稍懂电脑就会用) 缺点: ① 只支持电脑端,不支持手机:软件安装虽简单,但不一定所有人都…

行业常识_RFID

文章目录 1 RF2 RFID2.1 RFID的应用场景2.2 RFID工作原理 1 RF RF&#xff0c;是Radio Frequency的缩写&#xff0c; Radio&#xff0c;n. 收音机&#xff1b;无线电通讯&#xff1b; v. 用无线电通讯&#xff08;或发送消息&#xff09; Frequency&#xff0c;n. 频率 RF中文…

electron+vue3全家桶+vite项目搭建【16】electron多窗口,pinia状态无法同步更新问题解决

文章目录 引入实现效果展示问题展示解决方案思路整理1.主进程添加handle2.编写pinia插件3.完善pinia插件4.最终实现效果 引入 pinia是vue3官方支持的全局状态管理工具&#xff0c;简单易用&#xff0c;但是electron的多窗口虽然加载的页面是单个路由&#xff0c;但其实已经是另…

【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制

&#x1f389;欢迎来到Labview专栏~四足爬行机器人仿真与控制 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Labview-3D虚拟平台 文章作者技术和水平有限&#xff0c;如果文中出现错误&#…

【python】keras包:深度学习

Part 0. 环境配置 与 学习数据下载 keras包 与 tensorflow包 WinR &#xff0c;输入指令&#xff1a; pip install tensorflow pip install keras 推荐镜像&#xff1a;-i https://pypi.tuna.tsinghua.edu.cn/simple/ 关于包 keras包相当于是 tensflow 包的前端 tensflow包…

15 | Qt的自定义信号

1 前提 Qt 5.14.2 2 具体操作 2.1 自定义信号 2.1.1 UI界面设置 2.1.1.1 widget.ui 2.1.1.2 setdialog.ui 2.1.2 headers 2.1.2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui {class Widget; } QT_END_NAMESP…

105-Linux_Libevent库的安装与使用

文章目录 一.Libevent 概述1.Libevent的特点2.Libevent使用模型3.Libevent 支持的事件类型 二.Libevent的安装三.Libevent简单使用实例 一.Libevent 概述 Libevent 是开源社区的一款高性能的 I/O 框架库&#xff0c;使用 Libevent 的著名案例有&#xff1a;高性能的分布式内存…

操作系统之死锁处理策略

概念 一、什么是死锁 哲学家进程问题中&#xff0c;都在等待另外的哲学家放弃另一只筷子&#xff0c;造成了都不能用餐的现象&#xff0c;互相等待对方的资源 二、死锁、饥饿、死循环区别 三、死锁产生的条件 1、互斥条件 只有对互斥使用的资源的争抢才能导致死锁&#xff0…

shell编程、makefile学习笔记

windows :\r\n linux:\n 1.shell介绍 1.1、shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面&#xff0c;可以说它是人机交互的一种方式。 (2)我们可以使用shell和操作系统、uboot等软件系统进行交互。具体来说就是我们通过shell给软件…

【SpringBoot 应用打包与部署】

SpringBoot 应用打包与部署 笔记记录 1. Jar包方式打包与部署1.1 添加maven打包插件1.2 双击package打包成功1.3 IDEA中运行jar文件 2. War包方式打包与部署2.1 声明打包方式为War包2.2 双击package2.3 将打包好的war包放在Tomcat的webapps目录下 1. Jar包方式打包与部署 1.1 …

嵌入式开发--无刷电机学习4--SVPWM

SVPWM空间矢量脉宽调节 这张图是基于α和β坐标系&#xff0c;也就是定子磁场坐标系&#xff0c;图中的Uout就是定子磁场的空间矢量&#xff0c;它的角度表示定子线圈产生磁场的方向&#xff0c;长度表示磁场的强度&#xff0c;以电机匀速旋转为例&#xff0c;FOC控制的目标就是…

【Java】抽象类接口Object类

目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类与接口的区别 3.Object类 3.1getClass方法 3.2equals方法 3.3hashcode方法 1.抽象类 定义&#xff1a;抽象方法&…

[Cursor Tool] 面向编程的ChatGPT工具的入门使用指南

文章目录 0. 面向编程的ChatGPT工具的入门使用指南1. Cursor的下载和安装2. Cursor的基本功能的使用2.1 关于Cursor的Chat模式2.2 关于Cursor的Edit模式 3 关于Cursor的项目级应用4 使用Cursor帮助我们从项目的设计出发来为我们提供建议 0. 面向编程的ChatGPT工具的入门使用指南…

车载软件架构——闲聊几句AUTOSAR BSW(三)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我特别喜欢一个老话,来都来了。我觉得这就是松弛感,既然来了,就开心起来吧!松弛感来自于专注,焦虑不是靠克服的,是靠忘记的,当你很专注做一件事的时候…

剪枝与重参:课程总结

目录 课程总结前言1. 基础快速入门2. 基于VGG的模型剪枝3. 英伟达2-4剪枝方案4. YOLOv8剪枝5. ACNet、DBB、RepVGG重参个人总结 课程总结 前言 手写AI推出的全新模型剪枝与重参课程。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要是课程总结&#xff0c;对之前学…

设计模式之代理模式(静态代理动态代理)

目录 1、什么是代理模式 2、代理模式的结构 3、代理模式的实现 3.1 静态代理和动态代理概念 3.2 静态代理 3.3 动态搭理 3.3.1 代码实现 3.3.2 Proxy类讲解 4、动态代理VS静态代理 5、代理模式优缺点 1、什么是代理模式 由于某些原因需要给某对象提供一个代理以控制对…