第 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.mzph.cn/news/615821.shtml

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

相关文章

SAP 如何快速查询成本的异常

每当月末CO月结的时候&#xff0c;生产企业或多或少会遇到标准成本与实际成本差异偏大的情况&#xff0c;我们如何快速查看产成品的成本异常&#xff0c;一般来说二者偏差5%是正常的&#xff0c;如果偏差20%&#xff0c;就要重点关注。我们通过0062报表来查看 进入“屏幕选择”…

进销存+小程序商城:实现批发零售企业的互联网转型与管理升级

在当今互联网高速发展的时代&#xff0c;越来越多的批发零售企业开始开始考虑转型。在这个行业中&#xff0c;企业要想取得更好的发展&#xff0c;就要积极地拥抱互联网。专属的订货商城小程序是企业转型的第一步。通过将进销存与订货商城一体化&#xff0c;企业可以更好地满足…

argparse库

引言 argparse-------python用于解析命令行参数的标准模块 快速上手 import argparse parser argparse.ArgumentParser() 创建一个命令行解析器对象 parser.add_argument() 向解析器…

APP流量变现——4项关键指标决定了APP混合变现的收入

APP流量变现的方式有很多种&#xff0c;主要的可以分为IAA&#xff08;广告&#xff09;收入、IAP&#xff08;用户应用内付费&#xff09;收入、订阅收入、单次买断收入。这里主要围绕当前流行的混合变现模式&#xff0c;即广告收入&#xff08;IAA&#xff09;应用内付费&…

外汇天眼:塞浦路斯证券交易委员会(CySEC)确认了四家投资公司退出投资者赔偿基金(ICF)会员资格

塞浦路斯证券交易委员会&#xff08;CySEC&#xff09;今天确认了四家投资公司已被取消其在投资者赔偿基金&#xff08;ICF&#xff09;的会员资格。 以下公司不再是ICF的会员&#xff1a; 1.Stone Edge Capital Ltd&#xff08;LEI 213800PZFB9VV8FNWB30&#xff09;&#xf…

yum来安装php727

yum 安装php727,一键安装&#xff0c;都是安装在系统的默认位置&#xff0c;方便快捷 先确定linux平台中centos的版本信息&#xff0c;一下内容针对el7 查看linux版本 &#xff1a; cat /etc/redhat-release 查看内核版本命令&#xff1a; cat /proc/version (0)如果有安装好…

3万字数据结构与算法学习笔记+知识点总结

文章目录 数据结构与算法排序排序算法常见排序算法复杂度冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;堆排序&#xff08;Heap Sor…

浅谈电能管理系统在智能轨道交通中的设计与应用——安科瑞 顾烊宇

摘要&#xff1a;城市轨道交通可以填补市民出行方式的空缺&#xff0c;它的运行需要有持续的电能提供支持。为了给轨道交通营造稳定的运行环境&#xff0c;迫切需要建立相应的电能管理系统&#xff0c;以此实现高质量的电能供给。在本文中&#xff0c;将对应的电能管理系统作为…

MysqL——深入MySQL原理(一)

文章目录 MySQL架构图MySQL执行流程简要执行流程&#xff1a;详细执行流程 存储引擎SQL执行顺序存储结构实战演示 MySQL架构图 图例如下&#xff1a; server层&#xff1a; Connection Pool :连接池&#xff0c;负责管理持有所有的连接&#xff0c;采用BIO的技术&#xff0c;…

nvm安装pnpm,pnpm不是内部或者外部指令问题解决

node版本18支持安装pnpm 如需要安装pnpm&#xff0c;要先安装nvm切换node版本&#xff0c;因为pnpm要node版本18 https://github.com/nvm-sh/nvm nvm install 18 nvm use 18如遇版本切换失败问题&#xff1a; source ~/bashrc然后安装pnpm curl -fsSL https://get.pnpm.io/…

程序员必知!2024最新版设计模式大合集

程序员必知&#xff01;开放封闭原则的实战应用与案例分析 核心思想&#xff1a;在设计中&#xff0c;应尽量通过添加新的类或模块来增加新的功能&#xff0c;而不是修改现有的代码。 程序员必知&#xff01;依赖倒置原则的实战应用与案例分析 核心思想&#xff1a;高层模块不…

DCP文件传输的重要性与应用

在数字时代&#xff0c;文件传输已成为商业运作中不可或缺的一环。随着企业越来越多地采用云基础设施和服务&#xff0c;有效地在云和团队之间传输大文件和数据集变得至关重要。在这一背景下&#xff0c;数据复制协议&#xff08;DCP&#xff09;文件传输应运而生&#xff0c;引…

【Java】【OpenCV】【awt】两种方式实现很「高大上」图片双重曝光

自双重曝光产生以来&#xff0c;它就一直是摄影爱好者热衷于尝试的摄影手法。通过双重曝光&#xff0c;可以为普通的照片带来神秘的意境和让人难以言喻的感觉&#xff0c;使得每一个场景的纹理和颜色都有了一种如梦如幻的效果&#xff0c;让人沉醉于其中。 在以前&#xff0c;摄…

血泪教训!Java项目的路径中一定不要包含中文~

今天通过应用类加载器获取某个目录下的文件时&#xff0c;控制台一直没有输出&#xff0c;但是没有任何的报错&#xff0c;代码如下所示 ClassLoader classLoaderwjrApplicationContext.class.getClassLoader();//appURL url classLoader.getResource("com/wjr/service&qu…

达梦数据实时同步软件DMHS介绍和原理

1、产品介绍 达梦数据实时同步软件&#xff08;以下简称 DMHS&#xff09;是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术&#xff0c;不依赖主机上源数据库的触发器或者规则&#xff0c;对主机源数据库系统几乎无影…

Redis相关报错信息:Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。

报错信息&#xff1a; Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝&#xff0c;无法连接。 报错原因&#xff1a; 访问不到Redis服务 解决方案&#xff1a; 将Redis服务打开&#xff01; 使用cmd命令行打开本机服务管理&#xff1a; services…

数组深入详解

1、背景 上传图片&#xff0c;需要对图片格式进行校验&#xff0c;这是就可以使用数组 2.1、什么是数组&#xff1f; Java 语言中提供的数组是用来存储固定大小的同类型元素。 如&#xff1a;可以声明一个数组变量&#xff0c;如 numbers[100] 来代替直接声明 100 个独立变量…

【前端转安卓】-Java基础知识笔记

常量定义&#xff1a;final public class HelloWorld {// 静态常量public static final double PI 3.14;// 声明成员常量final int y 10;public static void main(String[] args) {// 声明局部常量final double x 3.3;} }变量声明、赋值 String username,address,phone,te…

关于《电能质量管理办法(暂行)》实施的意义及解决方案——安科瑞赵嘉敏

中华人民共和国国家发展和改革委员会令 第8号 《电能质量管理办法(暂行)》已经2023年12月26日第7次委务会议审议通过,现予公布,自2024 年4月1日起施行。 主任 郑栅洁 2023年12月27日 1 办法解读 新型电力系统中新能源所占比例越来越高&#xff0c;光伏、风力等分布式电源、…

高德打车引入“红绿灯倒计时”能力,算力技术升级打车体验

打到的车还有多久能到&#xff1f;接驾车辆原地不动是什么原因&#xff1f;乘客在打车时&#xff0c;常常因为无法了解实时接驾路况&#xff0c;容易出现“等车焦虑”。 如今&#xff0c;高德打车已全面应用“红绿灯倒计时”能力&#xff0c;让乘客在等车时就能掌握接驾路况&am…