Leetcode 第 369 场周赛题解

Leetcode 第 369 场周赛题解

  • Leetcode 第 369 场周赛题解
    • 题目1:2917. 找出数组中的 K-or 值
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:2918. 数组的最小相等和
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:2919. 使数组变美的最小增量运算数
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:2920. 收集所有金币可获得的最大积分
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 369 场周赛题解

在这里插入图片描述

题目1:2917. 找出数组中的 K-or 值

思路

模拟。

枚举每个比特位,遍历数组,如果第 i 个比特位上的 1 的个数 ≥ k,则把 2i 加到答案中。

代码

/** @lc app=leetcode.cn id=2917 lang=cpp** [2917] 找出数组中的 K-or 值*/// @lc code=start
class Solution
{
public:int findKOr(vector<int> &nums, int k){int k_or = 0;for (int i = 0; i < 32; i++){int count = 0;for (const int &num : nums)if (num & (1 << i))count++;if (count >= k)k_or += (1 << i);}return k_or;}
};
// @lc code=end

复杂度分析

时间复杂度:O(nlogU),其中 n 为数组 nums 的长度,U=max⁡(nums)。

空间复杂度:O(1)。

题目2:2918. 数组的最小相等和

思路

贪心。

设数组 nums1 的元素总和为 sum1,其中 0 的个数为 countZero1;数组 nums2 的元素总和为 sum2,其中 0 的个数为 countZero2。

题目要求我们必须将两个数组中的 所有 0 替换为严格正整数,并且满足两个数组中所有元素的和相等 。

最后返回最小相等和 ,如果无法使两数组相等,则返回 -1 。

基于贪心的思想,把所有的 0 改成 1,所有元素的和为最小。于是,数组 nums1 的最小和为 sum1 + countZero1,数组 nums2 的最小和为 sum2 + countZero2。

分类讨论:

  • 如果 sum1 < sum2 + countZero2 && countZero1 == 0,说明无法将数组 nums1 修改到和修改后的数组 nums2 的和相等,返回 -1。
  • 如果 sum2 < sum1 + countZero1 && countZero2 == 0,说明无法将数组 nums2 修改到和修改后的数组 nums1 的和相等,返回 -1。
  • 其他情况,都能得到最小相等和。最小相等和为两个最小和的较大值,即 max(sum1 + countZero1, sum2 + countZero2)。

代码

/** @lc app=leetcode.cn id=2918 lang=cpp** [2918] 数组的最小相等和*/// @lc code=start
class Solution
{
public:long long minSum(vector<int> &nums1, vector<int> &nums2){long long sum1 = 0, sum2 = 0;int countZero1 = 0, countZero2 = 0;for (const int num : nums1){if (num)sum1 += num;elsecountZero1++;}for (const int num : nums2){if (num)sum2 += num;elsecountZero2++;}if (sum1 < sum2 + countZero2 && countZero1 == 0)return -1;if (sum2 < sum1 + countZero1 && countZero2 == 0)return -1;return max(sum1 + countZero1, sum2 + countZero2);}
};
// @lc code=end

复杂度分析

时间复杂度:O(n+m),其中 n 为数组 nums1 的长度,m 为数组 nums2 的长度。

空间复杂度:O(1)。

题目3:2919. 使数组变美的最小增量运算数

思路

动态规划。

把大于 k 的元素视作 k。

由于大于 3 的子数组必然包含等于 3 的子数组,问题转换成:每个长为 3 的子数组都需要包含至少一个 k。

设 dp[i] 表示表示修改第 i 项并使前 i 项变为美丽数组的最小修改次数。

初始化时,dp[0] = max(0, k - nums[0])dp[1] = max(0, k - nums[1])dp[2] = max(0, k - nums[2])

状态转移方程:

dp[i] = min{dp[i−3], dp[i−2], dp[i−1]} + max{0,  k−nums[i]}

使原数组变为美丽数组的最小修改次数 ans = min{dp[n−3], dp[n−2], dp[n−1]}

代码

/** @lc app=leetcode.cn id=2919 lang=cpp** [2919] 使数组变美的最小增量运算数*/// @lc code=start
class Solution
{
public:long long minIncrementOperations(vector<int> &nums, int k){int n = nums.size();// dp[i] 表示表示修改第 i 项并使前 i 项变为美丽数组的最小修改次数vector<long long> dp(n, 0);// 初始化for (int i = 0; i < 3; i++)dp[i] = max(0, k - nums[i]);// 状态转移for (int i = 3; i < n; i++){// 状态转移方程dp[i] = min(dp[i - 3], min(dp[i - 2], dp[i - 1])) + max(0, k - nums[i]);}return min(dp[n - 3], min(dp[n - 2], dp[n - 1]));}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(n),其中 n 是数组 nums 的长度。

题目4:2920. 收集所有金币可获得的最大积分

思路

树型 DP。

题解:树 DP

代码

/** @lc app=leetcode.cn id=2920 lang=cpp** [2920] 收集所有金币可获得的最大积分*/// @lc code=start
class Solution
{
public:int maximumPoints(vector<vector<int>> &edges, vector<int> &coins, int K){int n = coins.size();const int MAXP = 20;// 建图vector<int> e[n];for (auto &edge : edges){e[edge[0]].push_back(edge[1]);e[edge[1]].push_back(edge[0]);}const long long INF = 1e18;long long f[n][MAXP][2];for (int i = 0; i < n; i++)for (int j = 0; j < MAXP; j++)f[i][j][0] = f[i][j][1] = -INF;// 树 dpfunction<void(int, int)> dp = [&](int sn, int fa){long long now = coins[sn];for (int j = 0; j < MAXP; j++){f[sn][j][0] = now - K;if (j > 0)f[sn][j][1] = now;now >>= 1;}// 枚举子节点的操作for (int fn : e[sn])if (fn != fa){dp(fn, sn);for (int j = 0; j < MAXP; j++){// 这里的 min 是因为我们只考虑 log 次操作long long best = max(f[fn][j][0], f[fn][min(MAXP - 1, j + 1)][1]);f[sn][j][0] += best;f[sn][j][1] += best;}}};dp(0, -1);long long ans = 0;for (int j = 0; j < MAXP; j++)ans = max({ans, f[0][j][0], f[0][j][1]});return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(nlogU),其中 n 为 coins 的长度,U=max⁡(coins)。

空间复杂度:O(nlog⁡U)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 行结束符:LF will be replaced by CRLF the next time Git touches it问题解决指南

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

ruoyi-vue前端数据字典值引用与回显(列表中回显,多选框回显)

1. 列表中回显&#xff1a; 代码&#xff1a; <el-table v-if"refreshTable" v-loading"loading" :data"deptList" row-key"deptId" :default-expand-all"isExpandAll" :tree-props"{children: children, hasChil…

BP神经网络的数据分类——语音特征信号分类

大家好&#xff0c;我是带我去滑雪&#xff01; BP神经网络&#xff0c;也称为反向传播神经网络&#xff0c;是一种常用于分类和回归任务的人工神经网络&#xff08;ANN&#xff09;类型。它是一种前馈神经网络&#xff0c;通常包括输入层、一个或多个隐藏层和输出层。BP神经网…

虚幻C+++基础 day2

角色移动与视角控制 Character类与相关API 创建Character子类MainPlayer.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "GameFramework/Character.h" #include &q…

遭受网络攻击泄露了101GB数据

臭名昭著的BlackCat/ALPHV勒索软件团伙声称对另一个组织发起了攻击。今天轮到意大利-法国科西嘉-费里斯公司发现自己正在与勒索软件作斗争。 BlackCat 在其数据泄露网站上报告称&#xff0c;该公司是网络攻击的受害者&#xff0c;并发布了从该公司 IT 基础设施中泄露的一系列样…

javaEE进阶

Cookie 是可以伪造的,比如说学生证是可以伪造的 Session 是不可以伪造的,这是学校系统记录在册的 如何获取 Cookie 我们先用 Servlet 原生的获取 cookie 的方式 我们在浏览器进行访问 但是实际上目前是没有 cookie 的,我们按 F12 进行添加 然后再重新访问,就能在 idea 看到 …

nginx下载安装和日志切割

目录 一、nginx安装配置 1.nginx版本 2.nginx安装配置 3.查看安装后的nginx 4.配置PATH变量 二、日志切割 1.给当前日志文件重命名 2.等待 3.写bash脚本 4.查看日志结果 5.加入crontab定时任务 结语 一、nginx安装配置 1.nginx版本 nginx如今分为商业版&#xff0…

SpringBoot定时任务打成jar 引入到新的项目中后并自动执行

一、springBoot开发定时任务 ①&#xff1a;连接数据库实现新增功能 1. 引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <dependen…

数据库索引详解

目录 第一章、快速了解索引1.1&#xff09;索引是什么1.2&#xff09;为什么使用索引1.3&#xff09;快速上手创建简单索引 第二章、索引分类2.1&#xff09;按数据结构分类2.1.1&#xff09;树型数据结构的索引①二叉树②B树③B 树&#xff1a;B 树的升级版 2.1.2&#xff09;…

Unity地面交互效果——4、制作地面凹陷轨迹

大家好&#xff0c;我是阿赵。   上一篇介绍了曲面细分着色器的基本用法和思路&#xff0c;这一篇在曲面细分的基础上&#xff0c;制作地面凹陷的轨迹效果。 一、思路分析 这次需要达到的效果是这样的&#xff1a; 从效果上看&#xff0c;这个凹陷在地面下的轨迹&#xff0…

RabbitMQ 死信队列

在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实际是将死信发送给了死信交换机&#xf…

【VUE+ elementUI 实现动态表头渲染】

VUE elementUI 实现动态表头渲染 1、定义 columns&#xff08;表头数据&#xff09; 和 dataList&#xff08;表格数据&#xff09; data() {return {loading: false,dataList: [{ name: 张三, sex: 男, age: 18 },{ name: 林琳, sex: 女, age: 20 },{ name: 王五, sex: 男, …

基于减法平均算法的无人机航迹规划-附代码

基于减法平均算法的无人机航迹规划 文章目录 基于减法平均算法的无人机航迹规划1.减法平均搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用减法平均算法来优化无人机航迹规划。 …

SpringBoot整合Canal+RabbitMQ监听数据变更(对rabbit进行模块封装)

SpringBootCanal(监听MySQL的binlog)RabbitMQ&#xff08;处理保存变更记录&#xff09; 在SpringBoot中采用一种与业务代码解耦合的方式&#xff0c;来实现数据的变更记录&#xff0c;记录的内容是新数据&#xff0c;如果是更新操作还得有旧数据内容。 使用Canal来监听MySQL的…

open clip论文阅读摘要

看下open clip论文 Learning Transferable Visual Models From Natural Language Supervision These results suggest that the aggregate supervision accessible to modern pre-training methods within web-scale collections of text surpasses that of high-quality crowd…

基于React开发的chatgpt网页版(仿chatgpt)

在浏览github的时候发现了一个好玩的项目本项目&#xff0c;是github大神Yidadaa开发的chatgpt网页版&#xff0c;该开源项目是跨平台的&#xff0c;Web / PWA / Linux / Win / MacOS都可以访问。非常有意思&#xff0c;本人就部署了一套&#xff0c;喜欢的同学可以体验一番。 …

Python之字符串、正则表达式练习

目录 1、输出随机字符串2、货币的转换&#xff08;字符串 crr107&#xff09;3、凯撒加密&#xff08;book 实验 19&#xff09;4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序&#xff0c;输出由英文字母大小写或…

wpf添加Halcon的窗口控件报错:下列控件已成功添加到工具箱中,但未在活动设计器中启用

报错截图如下&#xff1a; 注意一下新建工程的时候选择wpf应用而不是wpf应用程序。 添加成功的控件&#xff1a;

第一个ARM程序裸板点灯

硬件知识LED原理图 如何点亮一个LED灯&#xff1f; 看原理图&#xff0c;确定控制LED的引脚。看主芯片的芯片手册&#xff0c;确定如何设置控制这个引脚。写程序。 LED有插脚封装的、贴片封装的。 它们长得完全不一样&#xff0c;因此我们在原理图中把它们抽象出来。 点亮…

双通道 H 桥电机驱动芯片AT8833,软硬件兼容替代DRV8833,应用玩具、打印机等应用

上期小编给大家分享了单通道 H 桥电机驱动芯片&#xff0c;现在来讲一讲双通道的驱动芯片。 双通道 H 桥电机驱动芯片能通过控制电机的正反转、速度和停止等功能&#xff0c;实现对电机的精确控制。下面介绍双通道H桥电机驱动芯片的工作原理和特点。 一、工作原理 双通道 H 桥电…