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.hqwc.cn/news/164487.html

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

相关文章

腾讯、巨量等头部营销平台方法论

媒体、营销与市场生态正处于新一轮变革期&#xff0c;尤其是进入移动互联网时代后&#xff0c;行业话语权由创意人转向互联网人&#xff0c;营销的风向与规则&#xff0c;也越来越由掌握流量与资源的头部平台引领。 巨变之下&#xff0c;企业只有从本质层面&#xff0c;认清变…

最全的软件测试面试题(上)

1.熟悉软件测试流程&#xff0c;能够独立完成软件测试相关工作 软件测试流程&#xff1a;首先由公司高层进行立项&#xff0c;产品给出产品说明书&#xff0c;需求人员进行需求分析&#xff0c;接着进行需求评审&#xff08;参加人员&#xff1a;项目组里的人&#xff0c;产品&…

Samtec连接器技术前沿 | 全新对准功能确保测试和测量应用中的精确对准

【摘要/前言】 Samtec开发了一种创新的易于使用的对准技术&#xff0c;以确保测试和测量应用中的精密、高频压缩安装连接器的峰值性能。下面解释了我们所看到的趋势&#xff0c;并概述了我们针对出现的常见对准挑战所开发的解决方案。 【问题所在】 随着数据传输率的不断提高…

数据结构算法-回溯算法

引言 在原神的世界中&#xff0c;小森决定挑战自我&#xff0c;踏上了寻找风神的迷宫——风之迷宫。这个迷宫就像是一个巨大的电玩城&#xff0c;让小森感到困惑和无助。他站在迷宫的入口&#xff0c;看着眼前乱糟糟的路径&#xff0c;内心充满了不安和焦虑。 “派蒙&#xf…

【GO】项目import第三方的依赖包

目录 一、导入第三方包 1.执行命令 2.查看go环境变量参数 3.查看go.mod文件的变化情况 二、程序里如何import 1. import依赖包 2. 程序编写 本次学习go如果依赖第三方的包&#xff0c;并根据第三方的包提供的接口进行编程&#xff0c;这里需要使用go get命令。下面将go…

线性【SVM】数学原理和算法实现

一. 数学原理 SVM是一类有监督的分类算法&#xff0c;它的大致思想是&#xff1a;假设样本空间上有两类点&#xff0c;如下图所示&#xff0c;我们希望找到一个划分超平面&#xff0c;将这两类样本分开&#xff0c;我们希望这个间隔能够最大化来使得模型泛化能力最强。 如上图所…

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…

hadoop配置文件自检查(解决常见报错问题,超级详细!)

本篇文章主要的内容就是检查配置文件&#xff0c;还有一些常见的报错问题解决方法&#xff0c;希望能够帮助到大家。 一、以下是大家可能会遇到的常见问题&#xff1a; 1.是否遗漏了前置准备的相关操作配置&#xff1f; 2.是否遗的将文件夹(Hadoop安装文件夹&#xff0c;/dat…

图及谱聚类商圈聚类中的应用

背景 在O2O业务场景中&#xff0c;有商圈的概念&#xff0c;商圈是业务运营的单元&#xff0c;有对应的商户BD负责人以及配送运力负责任。这些商圈通常是一定地理围栏构成的区域&#xff0c;区域内包括商户和用户&#xff0c;商圈和商圈之间就通常以道路、河流等围栏进行分隔。…

Promise链式调用改写成async/await

首先&#xff0c;Promise链式调用和async/await都是用来解决异步调用层层嵌套的问题。 promise解决了回调地狱的问题&#xff0c;把异步任务完成后的处理函数换个位置放&#xff1a;传给then方法&#xff0c;并支持链式调用&#xff0c;避免层层回调。用catch方法捕获错误。 …

现一个智能的SQL编辑器

补给资料 管注公众号&#xff1a;码农补给站 前言 目前我司的多个产品中都支持在线编辑 SQL 来生成对应的任务。为了优化用户体验&#xff0c;在使用 MonacoEditor 为编辑器的基础上&#xff0c;我们还支持了如下几个重要功能&#xff1a; 多种 SQL 的语法高亮多种 S…

垃圾回收系统小程序定制开发搭建攻略

在这个数字化快速发展的时代&#xff0c;垃圾回收系统的推广对于环境保护和可持续发展具有重要意义。为了更好地服务于垃圾回收行业&#xff0c;本文将分享如何使用第三方制作平台乔拓云网&#xff0c;定制开发搭建垃圾回收系统小程序。 首先&#xff0c;使用乔拓云网账号登录平…