第 369 场周赛 (3题,递归式动态规划)

第一题

在这里插入图片描述
简单题,就不多写了

class Solution:
    def findKOr(self, nums: List[int], k: int) -> int:
        ans = [0] * 31
        for n in nums:
            for i in range(31):
                if 2**i & n == 2**i:
                    ans[i] += 1
        
        return sum([2**i if ans[i] >= k else 0 for i in range(31)])

第二题

在这里插入图片描述

  1. 0 至少被替换为 1,所以替换完成后两个数组的所有元素的和的最小值 = 替换前元素的和 + 数组中 0 的数量
  2. 只有当一个数组中没有0(即它的元素和无法增大),且它的元素和小于另一个数组替换后的所有元素和的最小值的时候,才会返回 -1
  3. 当两个数组中都有 0 时,那么答案就是 max(替换完成后两个数组的所有元素的和的最小值)
class Solution:
    def minSum(self, nums1: List[int], nums2: List[int]) -> int:
        n10, n20, sum1, sum2 = 0, 0, 0, 0
        for n in nums1:
            if n == 0:
                n10 += 1
            sum1 += n
        for n in nums2:
            if n == 0:
                n20 += 1
            sum2 += n
        if n10 == 0 and sum2 + n20 > sum1:
            return -1
        if n20 == 0 and sum1 + n10 > sum2:
            return -1
        return max(sum1 + n10, sum2 + n20)

第三题

在这里插入图片描述
赛中思路:

  1. 题目理解为,在数组中任意连续的三个数中,必有一个元素大于等于 k
  2. 对于任意一个数我们可以选择将它变成大于等于 k 的数,或者不对它进行操作
  3. 定义动态规划数组 t[i][j],其中 t[i][0] 表示在把 nums[i] 变成大于等于 k 的前提下 nums[ :i + 1] 为美丽数组的最小递增运算数,t[i][1] 表示在不对 nums[i] 操作的前提下 nums[ :i + 1] 为美丽数组的最小递增运算数
  4. 更新 t[i][0] ,因为要把 nums[i] 更新为大于等于 k 的数,那么 i - 1, i - 2, i - 3必有一个是 k ,但我们不知道是哪一个,所以取 min(t[i - 3][0], t[i - 2][0], t[i - 1][0])
  5. 更新 t[i][1] ,此时不操作 nums[i],那么为了使得 i,i - 1,i - 2,中有一个为 k,所以取 min(t[i - 2][0], t[i - 1][0])
  6. 通过4,5两步发现在更新值时不需要 t[i][1] 的数据,所以就不用第 5 步了
class Solution:
    def minIncrementOperations(self, nums: List[int], k: int) -> int:
        t = [0] * len(nums)
        t[0] = max(k - nums[0], 0)
        t[1] = max(k - nums[1], 0)
        t[2] = max(k - nums[2], 0)
        for i in range(3, len(nums)):
            t[i] = min(t[i - 3], t[i - 2], t[i - 1]) + max(k - nums[i], 0)
        return min(t[-1], t[-2], t[-3])

第四题

在这里插入图片描述
困难,还是一如既往的不会做,下面贴一下大佬小羊肖恩的题解

  1. 我们定义状态不能只包含我们讨论的是哪个子树,因为这并不能完整定义走到该子树的状态,我们还得看走到子树经过的点中有多少个点进行的是第二种操作,即该子树中元素被折半了多少次。
  2. 因此我们考虑以这两个变量作为我们动态规划的状态。但是这样我们状态会有多少个呢?如果不进行任何处理,我们的状态会达到 O(n2) ,因为总共有 n 个节点,深度可能达到 O(n),因此此前折半数量有可能达到 O(n)。
  3. 但是,我们发现,每个节点的 coins[i] 不会超过 104,因此在 14 次操作后总会变成 0,因此我们折半数量可以取与 14 的最小值,这样我们的状态总数便不超过 14n 了。
  4. 状态转移的过程中,我们只需要讨论当前节点选择的是何种操作,再往下进行答案的寻找即可,具体可见代码。如果你使用的是递归,要记得加上记忆化搜索,避免重复计算相同状态。每个状态的转移次数是 O(1) 的。因此,时间复杂度为 O(nlog⁡M)
class Solution:
    def maximumPoints(self, edges: List[List[int]], coins: List[int], k: int) -> int:
        n = len(coins)
        path = [[] for _ in range(n)]
        for u, v in edges:
            path[u].append(v)
            path[v].append(u)
        @cache
        def dfs(u, p, times):
            v = coins[u] >> times
            # 两种情况下的该点收益
            res0, res1 = v - k, v // 2
            # 折半情况下,新节点前的总折半次数,大于 14 和等于 14 等价
            new_times = min(times + 1, 14)
            for v in path[u]:
                if v != p:
                    res0 += dfs(v, u, times)
                    res1 += dfs(v, u, new_times)
            return max(res0, res1)
        ans = dfs(0, -1, 0)
        # 清空 cache 能让你的 Python 跑得快一点
        dfs.cache_clear()
        return ans

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Azure - 机器学习:使用 Apache Spark 进行交互式数据整理

目录 本文内容先决条件使用 Apache Spark 进行交互式数据整理Azure 机器学习笔记本中的无服务器 Spark 计算从 Azure Data Lake Storage (ADLS) Gen 2 导入和整理数据从 Azure Blob 存储导入和处理数据从 Azure 机器学习数据存储导入和整理数据 关注TechLead,分享AI…

论坛介绍 | COSCon'23 开源文化(GL)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&a…

ZYNQ连载08-Lwip网络组件

ZYNQ连载08-Lwip网络组件 1. 添加Lwip包 2. Lwip配置 我这里关闭ipv6和dhcp。 3. tcp客户端 #include "include/my_tcp.h" #include "lwip/ip.h"#define THREAD_STACKSIZE 1024 #define SERVER_PORT 8000 #define SERVER_ADDR "192.168.3.190&qu…

安全架构的设计理论与实践

安全架构的设计理论与实践 安全架构概述 信息安全面临的威胁 安全架构的定义和范围 信息安全相关的国内外标准及组织 主要安全模型 状态机模型(BLP)模型 Bell-IaPadula模型 Biba模型 Clark-Wilson (CWM)模型 ChineseWall模型 系统安全体系架构规划框架 安全技术体系架构 信息系…

C# 图解教程 第5版 —— 第13章 数组

文章目录 13.1 数组13.1.1 定义13.1.2 重要细节 13.2 数组的类型13.3 数组是对象13.4 一维数组和矩形数组13.5 实例化一维数组或矩形数组13.6 访问数组元素(*)13.7 初始化数组13.7.1 显示初始化一维数组13.7.2 显示初始化矩形数组13.7.3 初始化矩形数组的…

Python selenium驱动下载,模块安装以及基本使用

视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们以谷歌浏览器为例讲解。首先我们要去下载谷歌浏览器驱动。 谷歌浏览器驱动下载地址:Chromium History Versions Download ↓ 查看谷歌浏览器版本 右上角三个点 …

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

设计模式(16)迭代器模式

一、介绍: 1、定义:迭代器模式 (Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问聚合对象(如列表、集合等)中的元素,而无需暴露聚合对象的内部表示。迭代器模式将遍历逻辑封装在一个迭代器对象…

Go学习第十六章——Gin文件上传与下载

Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例(单文件)1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 …

14个最实用的WordPress SEO插件推荐

在这篇文章中,将为你推荐最有利于网站SEO的WordPress插件,这里介绍这些插件的主要功能及使用技巧,合理使用它们将有助于网站SEO排名。无论你是一个刚刚开始的博客作者,还是一个经验丰富的企业网站管理员,我们都将帮助你…

[云原生1. ] 使用Docker-compose一键部署Wordpress平台

文章目录 1. Docker-compose概述1.1 简介1.2 docker-compose 的三大概念1.3 docker-compose配置模板文件常用的字段1.4 docker-compose 常用命令及格式 2. YAML 文件的详细介绍及编写注意事项2.1 简介2.2 yaml的特性2.2.1 语法特点2.2.2 数据结构2.2.3 引号的区别2.2.4 内置类型…

centos 8 yum源不能使用问题

问题:新安装的centos 8 不能使用wget就不能下载和安装其他的软件 错误:为仓库 appstream 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist 解决: [rootlocalhost ~]# cd /etc/yum.repos.d [rootlocalhost yu…

Kali安装docker

第一步:kali添加Docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add 第二步:进入root更新源: su rootecho ‘deb https://download.docker.com/linux/debian stretch stable’> /etc/ap…

由一个单例模式引发的思考-holder类方式

前言: 最近在看《Java并发编程实践》,里面提到了一种实现单例模式的方式,并大致说明了机制,但仍不是很清晰,今日有空,查阅相关书籍,尝试解释其中道理。 单例模式: 单例模式是一种常…

【Go入门】GO语言基础快速入门

Go基础 这小节我们将要介绍如何定义变量、常量、Go内置类型以及Go程序设计中的一些技巧。 定义变量 Go语言里面定义变量有多种方式。 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: //定义一个名称为“variabl…

网络原理之TCP/IP

文章目录 应用层传输层UDP协议TCP协议TCP 的工作机制1. 确认应答2. 超时重传3. 连接管理TCP 的建立连接的过程(三次握手),和断开连接的过程(四次挥手)TCP 断开连接, 四次挥手 3. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 面向字节流10. 异常情况 本章节主要讨论…

docker部署prometheus+grafana服务器监控(二) - 安装数据收集器 node-exporter

在目标服务器安装数据收集器 node-exporter 1. 安装数据收集器 node-exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gztar xvf node_exporter-1.6.1.linux-amd64.tar.gzmv node_exporter-1.6.1…

JavaWeb——Servlet原理、生命周期、IDEA中实现一个Servlet(全过程)

6、servlet 6.1、什么是servlet 在JavaWeb中,Servlet是基于Java编写的服务器端组件,用于处理客户端(通常是Web浏览器)发送的HTTP请求并生成相应的HTTP响应。Servlet运行在Web服务器上,与Web容器(如Tomcat&…

【ARMv8 SIMD和浮点指令编程】NEON 通用数据处理指令——复制、反转、提取、转置...

NEON 通用数据处理指令包括以下指令(不限于): • DUP 将标量复制到向量的所有向量线。 • EXT 提取。 • REV16、REV32、REV64 反转向量中的元素。 • TBL、TBX 向量表查找。 • TRN 向量转置。 • UZP、ZIP 向量交叉存取和反向交叉存取。 1 DUP (element) 将…

什么是React中的有状态组件(stateful component)和无状态组件(stateless component)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…