第 379 场 LeetCode 周赛题解

A 对角线最长的矩形的面积

在这里插入图片描述

模拟

class Solution {
public:int areaOfMaxDiagonal(vector<vector<int>> &dimensions) {int res = 0, len2 = 0;for (auto &x: dimensions)if (x[0] * x[0] + x[1] * x[1] > len2 || x[0] * x[0] + x[1] * x[1] == len2 && x[0] * x[1] > res) {res = x[0] * x[1];len2 = x[0] * x[0] + x[1] * x[1];}return res;}
};

B 捕获黑皇后需要的最少移动次数

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

枚举:只有两种情况可以1次移动就能攻击黑皇后:1)白象和黑皇后在一条对角线或斜对角线上且白车没有在中间。 2)白车和黑皇后在同一行或同一列且白象没有在中间。 其他情况都要两次移动才能攻击黑皇后

class Solution {
public:int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {if (a == e && (c != e || d < min(b, f) || d > max(b, f)))return 1;if (b == f && (d != f || c < min(a, e) || c > max(a, e)))return 1;if (c - d == e - f && (a - b != e - f || a < min(c, e) || a > max(c, e)))return 1;if (c + d == e + f && (a + b != e + f || a < min(c, e) || a > max(c, e)))return 1;return 2;}
};

C 移除后集合的最多元素数

在这里插入图片描述

贪心:分别统计两个数组中各数出现的频率,然后先从 n u m s 1 nums1 nums1 中删除 n / 2 n/2 n/2 个数,优先删在 n u m s 1 nums1 nums1 出现次数大于 1 的数,其次删在 n u m s 2 nums2 nums2 中有出现的数,最后删其他的数。然后再从 n u m s 2 nums2 nums2 中删除 n / 2 n/2 n/2 个数,优先删在 n u m s 2 nums2 nums2 出现次数大于 1 的数,其次删在当前 s s s 中有出现的数,最后删其他的数。

class Solution {
public:int maximumSetSize(vector<int> &nums1, vector<int> &nums2) {unordered_map<int, int> cnt1, cnt2;for (auto x: nums1)cnt1[x]++;for (auto x: nums2)cnt2[x]++;int n = nums1.size();unordered_set<int> res;{int rm = n / 2;for (auto &[v, f]: cnt1)if (f != 1) {int d = min(rm, f - 1);f -= d;rm -= d;}if (rm != 0) {for (auto &[v, f]: cnt1)if (f && cnt2.count(v)) {f = 0;if (--rm == 0)break;}}if (rm != 0) {for (auto &[v, f]: cnt1)if (f) {f = 0;if (--rm == 0)break;}}for (auto &[v, f]: cnt1)if (f != 0)res.insert(v);}int rm = n / 2;for (auto &[v, f]: cnt2) {if (f != 1) {int d = min(rm, f - 1);f -= d;rm -= d;}}if (rm != 0) {for (auto &[v, f]: cnt2)if (f && res.count(v)) {f = 0;if (--rm == 0)break;}}if (rm != 0) {for (auto &[v, f]: cnt2)if (f) {f = 0;if (--rm == 0)break;}}for (auto &[v, f]: cnt2)if (f != 0)res.insert(v);return res.size();}
};

D 执行操作后的最大分割数量

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

前缀和 + 二分 + 动态规划 + 枚举:设 p s [ i ] [ j ] ps[i][j] ps[i][j] s [ 0 , i − 1 ] s[0,i-1] s[0,i1] ( ′ a ′ + j ) ('a'+j) (a+j) 字符出现的个数,设 p [ i ] p[i] p[i] 为字符串 s [ i , s . s i z e ( ) − 1 ] s[i,s.size()-1] s[i,s.size()1] 不执行替换操作按题目要求的最大分割数量。可以逆序求 p [ i ] p[i] p[i] :通过二分求包含 k k k 个不同字符的最长前缀 s [ i , l ] s[i,l] s[i,l] ,则有 p [ i ] = p [ l + 1 ] + 1 p[i]=p[l+1]+1 p[i]=p[l+1]+1 。然后正序枚举各位替换成各字符的情况,枚举过程中记录已遍历过的字符串前缀的分割数量,以及当前分割中出现过哪些字符。

class Solution {
public:int maxPartitionsAfterOperations(string s, int k) {int n = s.size();int ps[n + 1][26];for (int j = 0; j < 26; j++)ps[0][j] = 0;for (int i = 0; i < n; i++)for (int j = 0; j < 26; j++)//计算前缀和ps[i + 1][j] = s[i] - 'a' == j ? ps[i][j] + 1 : ps[i][j];int p[n + 1];p[n] = 0;for (int i = n - 1; i >= 0; i--) {//求p数组vector<int> vis(26, -1);int l = i, r = n - 1;while (l < r) {int mid = (l + r + 1) / 2;int cnt = 0;for (int j = 0; j < 26; j++)if (ps[mid + 1][j] - ps[i][j] != 0)cnt++;if (cnt <= k)l = mid;elser = mid - 1;}p[i] = p[l + 1] + 1;}int res = p[0];//不替换的情况int vis = 0;//当前分割中出现过的字符的 maskint cnt_pre = 0;//已遍历过的字符串前缀的分割数量for (int i = 0; i < n; i++) {//枚举各位for (int j = 0; j < 26; j++) {//枚举s[i]替换成 'a'+j 的情况int tmp = vis | (1 << j);// 将'a'+j 加入 maskif (pop_cnt(tmp) > k) {// 'a'+j 与当前分割不在同一分割tmp = 1 << j;//'a'+j 所在新的分割的 maskint l = i, r = n - 1;while (l < r) {//二分求 'a'+j 所在分割的右边界 int mid = (l + r + 1) / 2;int cnt = 0;for (int j = 0; j < 26; j++)if (tmp >> j & 1 || ps[mid + 1][j] - ps[i + 1][j] != 0)cnt++;if (cnt <= k)l = mid;elser = mid - 1;}res = max(res, cnt_pre + 1 + 1 + p[l + 1]);} else {// 'a'+j 与当前分割在同一分割int l = i, r = n - 1;while (l < r) {//二分求当前分割的右边界 int mid = (l + r + 1) / 2;int cnt = 0;for (int j = 0; j < 26; j++)if (tmp >> j & 1 || ps[mid + 1][j] - ps[i + 1][j] != 0)cnt++;if (cnt <= k)l = mid;elser = mid - 1;}res = max(res, cnt_pre + 1 + p[l + 1]);}}//更新当前分割的 maskvis |= 1 << (s[i] - 'a');if (pop_cnt(vis) > k) {cnt_pre++;//更新已遍历过的字符串前缀的分割数量vis = 1 << (s[i] - 'a');}}return res;}int pop_cnt(int x) {//返回二进制表示中1的位数int res = 0;for (int i = 0; i < 32; i++)if (x >> i & 1)res++;return res;}
};

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

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

相关文章

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇)

在上一篇文章中&#xff0c;我们深入探讨了Clone技术的多种用途&#xff0c;以及使用它所需满足的前提条件。我们也详细分析了Clone存在的限制&#xff0c;并深入了解了其背后的备份原理。今天&#xff0c;我们将继续探索MySQL Clone Plugin的强大功能&#xff0c;Clone其实最重…

盲盒小程序为什么发展这么快?盲盒商家的“春天”来了?

近几年&#xff0c;潮玩文化逐渐兴起&#xff0c;在市场上引起了人们的关注。其中盲盒更是深受大众喜爱&#xff0c;盲盒通过品牌IP&#xff0c;吸引了无数的年轻人。随着时间的推移&#xff0c;盲盒市场的需求不断增长&#xff0c;这一领域成为了资本市场的“新宠”&#xff0…

清水模板厂家专供 — 易脱模,不翘曲

在现代建筑施工中&#xff0c;清水模板的选择对于实现优质建筑表面尤为关键。我们专供的清水模板&#xff0c;凭借其易脱模和不翘曲的特性&#xff0c;为建筑项目提供了理想的解决方案。 产品特点 易脱模性能&#xff1a;我们的清水模板表面光滑细腻&#xff0c;经过特殊处理…

csv文件查找工具(一)

自己写的小工具&#xff0c;查询csv文件前三列的数据互查&#xff0c; 主要目的是 组sql 需要这三个数据互查&#xff0c; 当然从数据库查的更快&#xff0c; 但数据库的连接需要验证权限&#xff0c;能自己搞&#xff0c;先自己搞 速度待优化&#xff0c;没时间搞了&#xff0…

tiktok_浅谈hook ios之发包x-ss-stub

frida-trace ios手机一部&#xff0c;需要越狱的电脑一台idacrackerXI 目标app&#xff1a; ipa 包&#xff0c;点击前往 密码&#xff1a;8urs 协议分析起始从抓包开始&#xff0c;个人习惯 一般安卓逆向可以直接搜关键词&#xff0c;但是ios 都在 Mach-O binary (reverse…

微信小程序rsa加密

没有使用npm下载依赖的方式&#xff0c;直接引入了rsa.js文件&#xff0c;rsa.js文件在后面&#xff0c;目录结构如下&#xff1a; 在index.js文件引用 import { proxyInstance, backendUrl } from ../../util/request.js; import JSEncrypt from ./rsa.js const key -----BE…

AlexNet论文翻译与精读

1:该论文解决了什么问题&#xff1f; 图像分类问题 2&#xff1a;该论文的创新点&#xff1f; 1:使用了大的深的卷积神经网络进行图像分类&#xff1b; 2:采用了两块GPU进行分布式训练&#xff1b; 3:采用了Relu进行训练加速&#xff1b; 4:采用局部归一化提高模型泛化能…

启动Vue项目,报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

前言&#xff1a; 最近在打开一个Vue项目的时候&#xff0c;打开之后输入命令行&#xff1a;npm run serve之后发现&#xff0c;报错&#xff1a;vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序&#xff0c;以下是解决方案&#xff1a; 报错图片截图&…

Springboot注解@EnableConfigurationProperties和@ConfigurationProperties关系和作用

目录 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 简介 ConfigurationProperties EnableConfigurationProperties 二者之间的联系 总结 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 其实我能明白…

MFC 记录字段交换(RFX)学习

MFC ODBC 数据库类可自动移动数据源与记录集对象之间的数据。 从 CRecordset 派生类且不使用批量取行时,数据将通过记录字段交换 (RFX) 机制进行传输。 如果已在派生的 CRecordset 类中实现批量取行,则此框架将使用批量记录字段交换(批量 RFX)机制来传输数据。 RFX 类似于…

抖音利用人工智能操控用户行为?商家、达人该乐了

文&#xff5c;新熔财经 作者&#xff5c;一城 字节跳动早期投资人陈伟星在社交平台上狂喷抖音&#xff0c;引发不小的震动。 “运用人工智能对用户进行操控&#xff0c;引导其行为&#xff0c;最终实现抖音自身的意图目标”、“控制人类意识&#xff0c;沉迷于意识形态的皇…

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

作者&#xff1a;櫰木 1、 FreeIPA介绍 Kerberos协议只是一种协议标准的框架&#xff0c;而MIT Kerberos则是实现了该协议的认证服务&#xff0c;是Kerberos的物理载体。将它与Hadoop服务进行集成便能够很好地解决安全性不足的问题。 除了需要安装MIT Kerberos之外&#xff0…