第 379 场 LeetCode 周赛题解

news2024/11/18 8:47:00

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;
                else
                    r = mid - 1;
            }
            p[i] = p[l + 1] + 1;
        }

        int res = p[0];//不替换的情况
        int vis = 0;//当前分割中出现过的字符的 mask
        int 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 加入 mask
                if (pop_cnt(tmp) > k) {// 'a'+j 与当前分割不在同一分割
                    tmp = 1 << j;//'a'+j 所在新的分割的 mask
                    int 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;
                        else
                            r = 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;
                        else
                            r = mid - 1;
                    }
                    res = max(res, cnt_pre + 1 + p[l + 1]);
                }
            }
            //更新当前分割的 mask
            vis |= 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.coloradmin.cn/o/1377099.html

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

相关文章

花式反沙箱

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动&#xff0c;任何后果由使用者本人负责。 前言 目前沙箱正成为判断恶意威胁的一种最快速和最简单的方式&#xff0c;因此反沙箱检测在实战中发挥越来越重要的作用&#xff0c;无论是从反溯源还是延长加载器寿…

Camunda Asynchronous continuations

示例一 Service public class ExceptionService implements JavaDelegate {Overridepublic void execute(DelegateExecution execution) {System.out.println(1/0);} }ACT_RU_TASK &#xff1a;明明是UserTask2完成任务了&#xff0c;ServiceTask内部出错了&#xff0c;按说事务…

什么是云服务器?云服务器的工作原理是介绍

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

CSS 选择器全攻略:从入门到精通(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Kali Linux —— 漏洞分析工具

Cisco-torch与Global Exploiter专攻Cisco漏洞 一、Cisco 工具 Kali 有许多工具&#xff0c;比如信息收集工具、密码爆破工具等等&#xff0c;还有一些可用于攻击 Cisco 路由器的工具。Cisco-torch就是这样&#xff0c;用于大规模扫描、指纹识别和利用的工具之一。 打开终端控…

10 款适用于 Mac 的最佳 OCR 软件:高质量图片识别文字OCR

我们正处在无纸化办公渗透到我们工作中的时代&#xff0c;我们经常使用数字化文件。但是&#xff0c;我们很有可能需要进一步编辑这些不可编辑或不可搜索的文件以用于不同的目的。并应用 OCR 使这些扫描文件可编辑。对于 Mac 用户&#xff0c;使用适用于 Mac 的最佳 OCR 软件通…

WXUI 基于uni-app x开发的高性能混合UI库

uni-app x 是什么&#xff1f; uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一个跨平台应用开发引擎。 uni-app x 没有使用js和webview&#xff0c;它基于 uts 语言。在App端&#xff0c;uts在iOS编译为swift、在Android编译为kotlin&#xff0c;完全达到了原生应用…

DrGraph原理示教 - OpenCV 4 功能 - 边界填充

今天简单来看一下OpenCV中的边界填充 param src Source image. param dst Destination image of the same type as src and the size Size(src.colsleftright, src.rowstopbottom) . param top the top pixels param bottom the bottom pixels param left the left pixels par…

Echarts的常用API,以及常用的写法

ECharts是一款基于JavaScript的开源可视化库&#xff0c;用于构建交互式的图表和可视化数据。它提供了丰富的API用于定制图表和处理数据。下面是一些常用的ECharts API和写法的简介&#xff1a; 初始化图表容器&#xff1a; var myChart echarts.init(document.getElementBy…

基于opencv的指针式仪表的识别与读数

对于指针式仪表的识别与读数&#xff0c;可以通过以下步骤使用OpenCV实现&#xff1a; 读取图像&#xff1a;使用cv2.imread()函数读取要处理的仪表图像。 灰度转换&#xff1a;使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道&#xff0c;便…

告别信息差!奇点云SimbaMetric打破协作壁垒,为指标管理提效

谈到指标&#xff0c;相信每家企业都遇到过以下问题&#xff1a; 对指标的定义不清晰&#xff0c;必须跨部门反复沟通&#xff0c;新建、修改指标的成本高&#xff1b; 各种指标逻辑近似&#xff0c;但没有复用&#xff0c;数据团队有大量重复工作&#xff1b; 由于没有生…

argparse库

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

PHP留言板实现

完整教程PHP留言板 登陆界面 一个初学者的留言板&#xff08;登录和注册&#xff09;_php留言板登录注册-CSDN博客 留言板功能介绍 百度网盘 请输入提取码 进入百度网盘后&#xff0c;输入提取码&#xff1a;knxt&#xff0c;即可下载项目素材和游客访问页面的模板文件。 &…

TOP 10 屏幕录制软件工具,可帮您轻松录制视频!

随着越来越多的人远程工作和学习&#xff0c;对可靠、高效的屏幕录制工具的需求变得越来越重要。屏幕录制已成为电子学习、游戏和视频创作的重要组成部分。然而&#xff0c;有这么多可用的屏幕录制工具&#xff0c;选择合适的工具可能具有挑战性。为了帮助您节省搜索时间和精力…

权限系统模型:RBAC模型与ABAC模型

权限系统 基于角色的访问控制&#xff08;RBAC&#xff09; 基于角色的控制访问&#xff08;Role-Based Access Control&#xff0c;简称 RBAC&#xff09;&#xff0c;即&#xff1a;给予该账号角色&#xff08;Role&#xff09;&#xff0c;授权角色对应的相关权限&#xf…

0基础学习VR全景平台篇第137篇:720VR全景,DJI无人机遥控器调参

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 这节课以御2为例 介绍的是无人机调参 步骤一&#xff1a;下载DJI Go 4并注册账号 步骤二&#xff1a;拿下遥杆并装好&#xff0c;展开遥控天线。将无人机与遥控器相连&#xff…

什么是云服务器ECS - 云服务器 ECS - 阿里云

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

ChatGPT、Claude等聚合平台Poe,获7500万美元融资

1月11日&#xff0c;生成式AI聊天助手聚合平台Poe&#xff0c;获得7500万美元&#xff08;约5.3亿美元&#xff09;&#xff0c;估值5亿美元&#xff08;约35.8亿元&#xff09;。本次由 Andreessen Horowitz、a16z等投资。 Poe几乎聚合、镜像了目前市面上所有知名的文本、图片…

Easticsearch性能优化之硬件优化

Easticsearch性能优化之硬件优化 一、CPU配置二、内存配置1、内存配置总体方针2、内存实际分配3、禁止swap4、GC设置 三、IO&#xff08;磁盘&#xff09; 对于性能优化&#xff0c;升级硬件设备配置一直都是提高服务能力最快速有效的手段。硬件优化主要可以从CPU、内存、存储设…

数字孪生+可视化技术 构建智慧新能源汽车充电站监管平台

前言 充电基础设施为电动汽车提供充换电服务&#xff0c;是重要的交通能源融合类基础设施。近年来&#xff0c;随着新能源汽车产业快速发展&#xff0c;我国充电基础设施持续增长&#xff0c;已建成世界上数量最多、服务范围最广、品种类型最全的充电基础设施体系。着眼未来新…