[LeetCode周赛复盘] 第 326 场周赛20230702

news2025/1/9 16:22:34

[LeetCode周赛复盘] 第 326 场周赛20230702

    • 一、本周周赛总结
    • 6909. 最长奇偶子数组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 6916. 和等于目标值的质数对
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 6911. 不间断子数组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 6894. 所有子数组中不平衡数字之和
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • T1 dp。
  • T2 两数之和+分解质因数模板。
  • T3 有序列表+滑窗。
  • T4 维护有序列表+暴力。
    在这里插入图片描述

6909. 最长奇偶子数组

6909. 最长奇偶子数组

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 感觉暴力好麻烦,于是dp了。
  • 令f[i]为以i为结尾的最长有效子段。
  • 那么可以按照题目要求条件转移。
  • 注意:如果nums[i]%2=0,f[i]至少是1。

3. 代码实现

class Solution:
    def longestAlternatingSubarray(self, nums: List[int], t: int) -> int:
        ans = 0 
        n = len(nums)
        f = [0]*n 
        if nums[0]%2==0 and nums[0] <= t:
            f[0] = 1
        for i in range(1,n):
            if nums[i] > t:continue
            v = nums[i]%2
            if v == 0:
                f[i] = 1
            if v!= nums[i-1]%2 and f[i-1]:
                f[i] = 1+f[i-1]
        return max(f)

6916. 和等于目标值的质数对

6916. 和等于目标值的质数对

1. 题目描述

在这里插入图片描述

2. 思路分析

贴模板。

  • 一看就是两数之和,注意枚举到n//2即可。

3. 代码实现

class PrimeTable:
    def __init__(self, n: int) -> None:
        self.n = n
        self.primes = primes = []  # 所有n以内的质数
        self.min_div = min_div = [0] * (n + 1)  # md[i]代表i的最小(质)因子
        min_div[1] = 1

        # 欧拉筛O(n),顺便求出min_div
        for i in range(2, n + 1):
            if not min_div[i]:
                primes.append(i)
                min_div[i] = i
            for p in primes:
                if i * p > n: break
                min_div[i * p] = p
                if i % p == 0:
                    break


    def is_prime(self, x: int):
        """检测是否是质数,最坏是O(sqrt(x)"""
        if x < 3: return x == 2
        if x <= self.n: return self.min_div[x] == x
        for i in range(2, int(x ** 0.5) + 1):
            if x % i == 0: return False
        return True

    def prime_factorization(self, x: int):
        """分解质因数,复杂度
        1. 若x>n则需要从2模拟到sqrt(x),如果中间x降到n以下则走2;最坏情况,不含低于n的因数,则需要开方复杂度
        2. 否则x质因数的个数,那么最多就是O(lgx)"""
        n, min_div = self.n, self.min_div
        for p in range(2, int(x ** 0.5) + 1):
            if x <= n: break
            if x % p == 0:
                cnt = 0
                while x % p == 0: cnt += 1; x //= p
                yield p, cnt
        while 1 < x <= n:
            p, cnt = min_div[x], 0
            while x % p == 0: cnt += 1; x //= p
            yield p, cnt
        if x >= n and x > 1:
            yield x, 1

    def get_factors(self, x: int):
        """求x的所有因数,包括1和x"""
        factors = [1]
        for p, b in self.prime_factorization(x):
            n = len(factors)
            for j in range(1, b + 1):
                for d in factors[:n]:
                    factors.append(d * (p ** j))
        return factors

    def mr_is_prime(self, x):
        """
        Miller-Rabin 检测. 检测x是否是质数,置信度: 1 - (1/4)^k. 复杂度k*log^3
        但是longlong以内可以用k==3或7的代价,换取100%置信度
        https://zhuanlan.zhihu.com/p/349360074
        """
        if x < 3 or x % 2 == 0:
            return x == 2
        if x % 3 == 0:
            return x == 3

        u, t = x - 1, 0
        while not u & 1:
            u >>= 1
            t += 1
        ud = (2, 325, 9375, 28178, 450775, 9780504, 1795265022)  # long long 返回用这个7个数检测100%正确
        # ud = (2, 7, 61)  # int 返回用这3个数检测100%正确
        # for _ in range(k):
        #     a = random.randint(2, x - 2)
        for a in ud:
            v = pow(a, u, x)
            if v == 1 or v == x - 1 or v == 0:
                continue
            for j in range(1, t + 1):
                v = v * v % x
                if v == x - 1 and j != t:
                    v = 1
                    break
                if v == 1:
                    return False
            if v != 1:
                return False
        return True

pt = PrimeTable(10**6+1)
class Solution:
    def findPrimePairs(self, n: int) -> List[List[int]]:
        ans = []
        for x in pt.primes:
            if x > n//2:
                break 
            if pt.is_prime(n-x):
                ans.append([x,n-x])
        return ans                         

6911. 不间断子数组

6911. 不间断子数组

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 看起来就是变长滑窗。
  • 枚举每个i作为右端点向左能找到的合法窗口,这个窗口内所有数字差应该<=2。
  • 那么难点就在于如何维护这个窗口内的最大最小值,直接用有序集合即可。

3. 代码实现

from sortedcontainers import SortedList 
class Solution:
    def continuousSubarrays(self, nums: List[int]) -> int:
        n = len(nums)
        q = deque()
        s = SortedList()
        ans = 0
        for v in nums:
            q.append(v)
            s.add(v)
            while s[-1] - s[0]>2:
                s.remove(q.popleft())
            ans += len(q)
        return ans 

6894. 所有子数组中不平衡数字之和

6894. 所有子数组中不平衡数字之和

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 和昨晚的G差不多。[abc周赛复盘] AtCoder Beginner Contest 308 20230701
  • 数据量1000,考虑暴力枚举每个区间。
  • 固定左端点,右端点右移时,增加集合内的性质。
  • 用有序列表维护集合即可,添加一个数时,会拆分原本相邻的数,减少一个差,增加两个差。

3. 代码实现

from sortedcontainers import SortedList 
class Solution:
    def sumImbalanceNumbers(self, nums: List[int]) -> int:
        n = len(nums)
        s = SortedList()
        ans = 0
        for i in range(n):
            s.clear()
            p = 0 
            for j in range(i,n):
                v = nums[j]
                t = s.bisect_left(v)
                if t and t < len(s):
                    x = s[t] - s[t-1]
                    if x> 1:
                        p -= 1
                if t:
                    x = v - s[t-1]
                    if x > 1:
                        p += 1
                if t < len(s):
                    x = s[t] - v
                    if x >1:
                        p += 1
                s.add(v)
                ans += p 
        return ans     

参考链接

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

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

相关文章

【小沐学Unity3d】Unity播放视频(VideoPlayer组件)

文章目录 1、简介2、脚本播放示例3、界面播放示例3.1 2d界面全屏播放3.2 2d界面部分区域播放3.3 3d模型表面播放 结语 1、简介 使用视频播放器组件可将视频文件附加到游戏对象&#xff0c;然后在运行时在游戏对象的纹理上播放。 视频播放器 (Video Player) 组件: 属性功能Sourc…

Java实现OpenAI 模型训练(fine-tune)

本文章介绍如何用java实现OpenAI模型训练&#xff0c;仅供参考 提前准备工作 OpenAI KEY&#xff0c;获取方式可自行百度需要自备VPN 或 使用国外服务器转发需要训练的数据集&#xff0c;文章格式要求为JSONL&#xff0c;格式内容详见下图&#xff08;尽量不要低于500个问答&…

openai

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;人工智能。 目录 1、简介2、如何实现3、api文档 1、简介 OpenAI 提供了一个名为 OpenAI API 的库&#xff0c;用…

npm构建vite项目

基础环境 npm init vitelatest 依次输入项目名称、使用框架、使用语言。 生成的项目 进入目录&#xff0c;安装依赖&#xff0c;启动项目。 cd 0702_demo01npm installnpm run dev

网络安全进阶学习第四课——SSRF服务器请求伪造

文章目录 一、什么是SSRF&#xff1f;二、SSRF成因三、SSRF简析四、PHP存在SSRF的风险函数五、后台源码获取方式六、SSRF危害七、SSRF漏洞挖掘从WEB功能上寻找&#xff0c;从URL关键字中寻找 八、SSRF具体利用ssrf常利用的相关协议PHP伪协议读取文件端口扫描 九、SSRF存在的必要…

架构分层方法指导

在《不过时的经典层架构》里讲了经典的四层架构怎样对易变性做封装。咱们实际项目中&#xff0c;如果没有足够的实践和关键性思考&#xff0c;还是很可能使用名义上科学的分类理论&#xff0c;却在按照功能进行架构分层。今天咱们就通过一些简单的指导来尽量减少这种风险。 四问…

LeetCode 75 —— 70. 爬楼梯

LeetCode 75 —— 70. 爬楼梯 一、题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法…

机器学习笔记 - 基于OpenCV和Vantage-point tree构建图像哈希搜索引擎

一、关于图像哈希 上一篇文章中,了解到了图像哈希是使用算法为图像分配唯一哈希值的过程。在深度学习普及之前,一些搜索引擎使用散列技术来索引图像。 言外之意目前的图像搜索引擎主要都是基于深度学习的技术,不过思路都是一样的,我们这里基于OpenCV提供的图像哈希技术构建…

python实现削苹果小游戏

也不用998只有199源码发你。 支付完发我邮箱发你源代码。

RISC-V处理器的设计与实现(三)—— 上板验证(基于野火征途Pro开发板)

文章目录 RISC-V处理器的设计与实现&#xff08;一&#xff09;—— 基本指令集_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;二&#xff09;—— CPU框架设计_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;三&#xff09;—— 上板验…

Gradle安装与配置(8.2)

一、下载地址 https://gradle.org/releases/ https://downloads.gradle.org/distributions/gradle-8.2-bin.zip 解压后放到合适的位置 二、配置环境变量并测试 D:\ProgramFiles\gradle-8.2\bin gradle -v 三、配置镜像 D:\ProgramFiles\gradle-8.2\init.d init.gradle&…

算法第36天:数组中出现次数超过一半的数字【摩尔投票法】

算法介绍 摩尔投票法&#xff1a;求众数的方法。 就是维护一个集合&#xff0c;然后我们遍历我们的数组&#xff0c;假如现在我们遍历到的数为x&#xff0c;当集合中都是x的话我们就将x放入集合中&#xff0c;如果我们遍历到的数为x&#xff0c;但是集合中有y&#xff0c;那么…

【VulnHub系列】West-Wlid1.1

实验信息 Kali&#xff1a;192.168.10.106 WestWild&#xff1a;192.168.104 实验过程 通过arp-scan查找目标主机&#xff0c;确定目标主机IP192.168.10.104 sudo arp-scan --interface eth0 192.168.10.0/24 探测靶机开放的端口 sudo nmap -sT --min-rate 10000 -p- 192.1…

Redis的持久化机制(1)

RDB&#xff0c;即Redis DataBase的简称。RDB是Redis默认的持久化机制 RDB持久化文件&#xff0c;速度比较快&#xff0c;而且存储的是一个二进制的文件&#xff0c;传输起来很方便 在指定的时间间隔内&#xff0c;将内存中的数据集的快照写入磁盘。默认保存在/usr/local/bin目…

122.【SpringBoot - 再刷 - 基础入门 - 01】

SpringBoot2 核心技术 (一)、SpringBoot核心技术入门1.Spring能做什么?1.1、Spring 的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2.为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3.时代背景3.1、微服务3.2、分布式的困难…

github克隆代码加速

https://www.gitclone.com/gogs/ 只需要在正常的git clone后的URL里&#xff0c;嵌入gitclone.com即可快速clone 举例&#xff1a; #原地址 git clone https://github.com/SpringSource/Spring-framework #新地址 git clone https://gitclone.com/github.com/SpringSource/…

2023年出货量预计增长75%,谁在领跑规模化量产赛道?

2023年将成为一个分水岭&#xff0c;中国智能驾驶市场已经进入了下一个竞争周期&#xff0c;卷&#xff0c;难 成为了智驾赛道新的关键词&#xff0c;对各赛道的供应商来说&#xff0c;未来几年将是比拼规模化与降本。 对各级供应商来说&#xff0c;产品规模化量产&#xff0c…

【二叉树part07】| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

目录 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 &#x1f388;LeetCode501.二叉搜索树中的众数 &#x1f388;LeetCode236.二叉树的最近公共祖先 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 链接&#xff1a;530.二叉树的最小绝对差 给你一个二叉搜索树的根…

主成分分析系列(二)为什么特征向量是主成分

在主成分分析系列&#xff08;一&#xff09;概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化&#xff0c;在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是&#xff1a; 设 V \mathbf{V} V 为 d {d} d 维 线性空间&#xff08;即…

python项目导入导出依赖包

1. 导出所有依赖包 进入项目路径&#xff0c;执行以下命令&#xff1a; pip freeze > requirements.txt然后在当前目录是可以看到生成“requirements.txt”文件&#xff0c;可以打开看看&#xff0c;会发现有很多个包信息&#xff0c;其实这里是把你当前python环境的所有包…