第 369 场 LeetCode 周赛题解

news/2025/2/13 1:51:45/

A 找出数组中的 K-or 值

在这里插入图片描述
在这里插入图片描述

模拟

class Solution {
public:int findKOr(vector<int> &nums, int k) {vector<int> cnt(32);for (auto x: nums)for (int i = 0; i < 32; i++)if (x >> i & 1)cnt[i]++;int res = 0;for (int i = 0; i < 32; i++)if (cnt[i] >= k)res |= 1 << i;return res;}
};

B 数组的最小相等和

在这里插入图片描述

分类讨论:将两个数组中的 0 0 0 看作 1 1 1 求数组替换完后的最小数组和,若两个数组的最小数组和相等返回 0 0 0 ,否则只有最小数组和较小的一个数组存在 0 0 0 有解。

class Solution {
public:using ll = long long;long long minSum(vector<int> &nums1, vector<int> &nums2) {ll s1 = 0, s2 = 0;//两个数组的最小数组和bool have1 = false, have2 = false;//两个数组是否含有0for (auto x: nums1) {if (x)s1 += x;else {have1 = true;s1 += 1;}}for (auto x: nums2) {if (x)s2 += x;else {have2 = true;s2 += 1;}}if (s1 > s2) {swap(s1, s2);swap(have1, have2);}if (s1 == s2)return s1;return have1 ? s2 : -1;}
};

C 使数组变美的最小增量运算数

在这里插入图片描述
在这里插入图片描述

动态规划:设 p [ i ] p[i] p[i] 为将 n u m s [ 0 , i ] nums[0,i] nums[0,i] 变为美丽数组且满足 n u m s [ i ] ≥ k nums[i]\ge k nums[i]k 的最小递增运算数,有状态转移方程: p [ i ] = { m a x { k − n u m s [ i ] , 0 } i < 3 m i n { p [ i − 1 ] , p [ i − 2 ] , p [ i − 3 ] } + m a x { k − n u m s [ i ] , 0 } , i ≥ 3 p[i]=\left\{\begin{matrix} max\{k-nums[i],0\} & i<3 \\ min\{p[i-1],p[i-2],p[i-3] \}+max\{k-nums[i],0\} & ,i\ge 3 \end{matrix}\right. p[i]={max{knums[i],0}min{p[i1],p[i2],p[i3]}+max{knums[i],0}i<3,i3

class Solution {
public:using ll = long long;long long minIncrementOperations(vector<int> &nums, int k) {int n = nums.size();ll p[n];for (int i = 0; i < 3; i++)p[i] = max(k - nums[i], 0);for (int i = 3; i < n; i++) {p[i] = min({p[i - 1], p[i - 2], p[i - 3]}) + max(k - nums[i], 0);}return min({p[n - 1], p[n - 2], p[n - 3]});}
};

D 收集所有金币可获得的最大积分

在这里插入图片描述
在这里插入图片描述
记忆化搜索:设 p [ c u r ] [ c n t ] p[cur][cnt] p[cur][cnt] 为以 c u r cur cur 为根的子树在之前已经使用了 c n t cnt cnt 次第二种方法的情况下可获得的最大积分,有状态转移方程: p [ c u r ] [ c n t ] = m a x { ⌊ c o i n s [ c u r ] 2 c n t ⌋ − k + ∑ j ∈ s o n ( c u r ) p [ j ] [ c n t ] ⌊ c o i n s [ c u r ] 2 c n t + 1 ⌋ + ∑ j ∈ s o n ( c u r ) p [ j ] [ c n t + 1 ] p[cur][cnt]=max\left\{\begin{matrix} \left \lfloor \frac {coins[cur]} {2^{cnt}} \right \rfloor-k + \sum_{j\in son(cur)}p[j][cnt] \\ \left \lfloor \frac {coins[cur]} {2^{cnt+1}} \right \rfloor + \sum_{j\in son(cur)}p[j][cnt+1] \end{matrix}\right. p[cur][cnt]=max 2cntcoins[cur]k+json(cur)p[j][cnt]2cnt+1coins[cur]+json(cur)p[j][cnt+1]

class Solution {
public:int maximumPoints(vector<vector<int>> &edges, vector<int> &coins, int k) {int n = coins.size();vector<int> e[n];for (auto &ei: edges) {e[ei[0]].push_back(ei[1]);e[ei[1]].push_back(ei[0]);}int M = 16, inf = INT32_MIN;int p[n][M];for (int i = 0; i < n; i++)for (int j = 0; j < M; j++)p[i][j] = inf;//初始化标志function<int(int, int, int)> dfs = [&](int cur, int cnt, int par) {//记忆化搜索if (p[cur][cnt] != inf)return p[cur][cnt];if (cnt == M - 1)//子树所有数已经为都0,接下来全用第二种方法return p[cur][cnt] = 0;int r1 = (coins[cur] >> cnt) - k, r2 = coins[cur] >> (cnt + 1);for (auto j: e[cur]) {if (j == par)continue;r1 += dfs(j, cnt, cur);r2 += dfs(j, cnt + 1, cur);}return p[cur][cnt] = max(r1, r2);};return dfs(0, 0, -1);}
};

http://www.ppmy.cn/news/1184605.html

相关文章

python自动化测试(五):按键模拟输入:全选、复制、清空、粘贴、完成

前置条件&#xff1a; 本地部署&#xff1a;ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) &#xff08;32 位&#xff09; Google驱动的selenium版本是3.11.0 目录 一、配置代码 二、键盘组合输入 2.1 全选&#xff1a;ctrl a 2.2 复制…

ELASTICO-A Secure Sharding Protocol For Open Blockchains

INTRO 在中本聪共识中&#xff0c;通过POW机制来公平的选举leader&#xff0c;不仅非常消耗power&#xff0c;并且拓展性也不好。现在比特币中是7 TPS&#xff0c;和其他的支付系统相比效率相差甚远。 当前的许多拜占庭共识协议&#xff0c;并不支持在一个开放的环境中使用&a…

Java架构师系统安全

目录 1 导学2 信息安全基础知识3 信息安全系统的组成框架4 信息安全技术4.1 加密技术4.2 对称加密技术4.3 非对称加密技术4.4 信息摘要4.5数字签名5 信息安全的抗攻击技术5.1 ARP欺骗的原理5.2 ARP欺骗的防范措施5.3 IP欺骗的原理和流程6 信息安全的保证体系和评估方法7 网络安…

数学知识:扩展欧几里得算法

gcd就是a、b的最大公约数 #include<iostream> using namespace std;int exgcd(int a, int b, int &x, int &y)//返回gcd(a,b) 并求出解(引用带回) {if(b0){x 1, y 0;return a;}int x1,y1,gcd;//这里不用看a和b谁大&#xff0c;因为递归还是会反过来比较&#x…

C# 图解教程 第5版 —— 第11章 结构

文章目录 11.1 什么是结构11.2 结构是值类型11.3 对结构赋值11.4 构造函数和析构函数11.4.1 实例构造函数11.4.2 静态构造函数11.4.3 构造函数和析构函数小结 11.5 属性和字段初始化语句11.6 结构是密封的11.7 装箱和拆箱&#xff08;*&#xff09;11.8 结构作为返回值和参数11…

Kubernetes —集群故障排查(Kubectl 、telepresence)

一、用 Kubectl 调试 Kubernetes 节点 1、准备开始 你必须拥有一个 Kubernetes 的集群&#xff0c;同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果你还没有集群&#xff0c;你可以通过 Minikube 构建…

Java SE 学习笔记(十七)—— 单元测试、反射

目录 1 单元测试1.1 单元测试概述1.2 单元测试快速入门1.3 JUnit 常用注解 2 反射2.1 反射概述2.2 获取类对象2.3 获取构造器对象2.4 获取成员变量对象2.5 获取常用方法对象2.6 反射的作用2.6.1 绕过编译阶段为集合添加数据2.6.2 通用框架的底层原理 1 单元测试 1.1 单元测试概…

LS最小二乘圆拟合

1. 方式1(直接基于最小二乘的数学解析解) bool circle_LS(const vector<POINT>& points, double& center_x, double& center_y, double& radius) {center_x = 0.0;center_y = 0.0;radius = 0.0;if (points.size() < 3){return false;}double sum_x …