第 368 场 LeetCode 周赛题解

news2024/11/27 8:28:45

A 元素和最小的山形三元组 I

在这里插入图片描述

前后缀操作:求出前后缀上的最小值数组,然后枚举 j j j

class Solution {
public:
    int minimumSum(vector<int> &nums) {
        int n = nums.size();
        vector<int> l(n), r(n);//l[i]=min{nums[0],...,nums[i]}, r[i]=min{nums[i],...,nums[n-1]}
        l[0] = nums[0];
        for (int i = 1; i < n; i++)
            l[i] = min(l[i - 1], nums[i]);
        r[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--)
            r[i] = min(r[i + 1], nums[i]);

        int res = INT32_MAX;
        for (int j = 1; j < n - 1; j++)
            if (l[j - 1] < nums[j] && r[j + 1] < nums[j])
                res = min(res, l[j - 1] + nums[j] + r[j + 1]);
        return res == INT32_MAX ? -1 : res;
    }
};

B 元素和最小的山形三元组 II

在这里插入图片描述

同 A …

class Solution {
public:
    int minimumSum(vector<int> &nums) {
        int n = nums.size();
        vector<int> l(n), r(n);//l[i]=min{nums[0],...,nums[i]}, r[i]=min{nums[i],...,nums[n-1]}
        l[0] = nums[0];
        for (int i = 1; i < n; i++)
            l[i] = min(l[i - 1], nums[i]);
        r[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--)
            r[i] = min(r[i + 1], nums[i]);

        int res = INT32_MAX;
        for (int j = 1; j < n - 1; j++)
            if (l[j - 1] < nums[j] && r[j + 1] < nums[j])
                res = min(res, l[j - 1] + nums[j] + r[j + 1]);
        return res == INT32_MAX ? -1 : res;
    }
};

C 合法分组的最少组数

在这里插入图片描述

枚举:枚举分组中有最多下标的组的下标数 i i i ,设一个数 v a l val val n u m s nums nums 的出现次数为 c i ci ci ,若 v a l val val 可以满足条件的被分为若干组,则有 c i = a × i + b × ( i − 1 ) , a ≥ 0 , b ≥ 0 ci=a\times i+b\times(i-1), a\ge0,b\ge 0 ci=a×i+b×(i1),a0,b0,等价于 c i = a b × i − b , a b ≥ b ≥ 0 ci=ab\times i - b,ab\ge b\ge0 ci=ab×ib,abb0,即 ⌈ c i i ⌉ ≥ ⌈ c i i ⌉ × i − c i \left \lceil \frac {ci} i \right \rceil \ge \left \lceil \frac {ci} i \right \rceil\times i-ci iciici×ici

class Solution {
public:
    int minGroupsForValidAssignment(vector<int> &nums) {
        unordered_map<int, int> cnt;
        for (auto x: nums)
            cnt[x]++;
        unordered_map<int, int> can;
        int m = cnt.size();//nums中不同的数val的个数
        for (auto &[_, ci]: cnt) {
            for (int i = 1; i <= ci + 1; i++) {
                int ab = (ci - 1) / i + 1;
                int b = ab * i - ci;
                if (ab >= b)
                    can[i]++;
            }
        }
        int mx = 1;
        for (auto &[gs, ci]: can)
            if (ci == m)//对nums中每个数val都可以划分为若干大小为gs-1和若干大小为g的组
                mx = max(mx, gs);
        int res = 0;
        for (auto &[_, ci]: cnt)
            res += (ci - 1) / mx + 1;
        return res;
    }
};

D 得到 K 个半回文串的最少修改次数

在这里插入图片描述

动态规划:首先需要预处理求出 c o s t cost cost 数组( c o s t [ i ] [ j ] cost[i][j] cost[i][j] 为将字符串 s [ i , j ] s[i,j] s[i,j] 修改为半回文串的最少修改次数),然后设 p [ i ] [ j ] p[i][j] p[i][j] 为使 s [ 0 , i ] s[0,i] s[0,i] 可分为 j j j 个半回文串的最少操作数,枚举其第 j j j 个半回文串可能的长度来进行状态转移

class Solution {
public:
    vector<vector<int>> cost;
    string s;
    int n;

    void comp_cost(int i, int j, int d) {//以d为模数(题目描述中的d)更新cost[i][j]
        int g = (j - i + 1) / d;//分组大小
        int tot = 0;
        for (int ind = 0; ind < d; ind++) {//枚举d个分组,若s[i,j]是半回文串则每个分组都是回文串
            for (int l = i + ind, r = i + ind + d * (g - 1); l <= r; l += d, r -= d)
                if (s[l] != s[r])
                    tot++;
        }
        cost[i][j] = min(cost[i][j], tot);//更新cost[i][j]
    }

    int minimumChanges(string s, int k) {
        this->s = s;
        n = s.size();
        cost = vector<vector<int>>(n, vector<int>(n, INT32_MAX));
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {//s[i,j]
                int len = j - i + 1;
                for (int d = 1; d * d <= len; d++)
                    if (len % d == 0) {//len的因子d
                        comp_cost(i, j, d);
                        if (d != len / d && d != 1)//len的因子len/d
                            comp_cost(i, j, len / d);
                    }
            }
        }
        int p[n][n + 1];// loc, k
        for (int i = 0; i < n; i++)
            for (int j = 0; j <= n; j++)
                p[i][j] = INT32_MAX;//无效状态标志
        for (int i = 1; i < n; i++) {
            for (int j = 1; j <= (i + 1) / 2; j++) {
                if (j == 1)
                    p[i][j] = cost[0][i];
                for (int pre = 0; i - pre > 1; pre++)
                    if (p[pre][j - 1] != INT32_MAX)
                        p[i][j] = min(p[i][j], p[pre][j - 1] + cost[pre + 1][i]);//考虑最后一个半回文串为s[pre+1][i]的情况
            }
        }
        return p[n - 1][k];
    }
};

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

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

相关文章

AirPods Pro的降噪功能让你体验更好,那么如何打开这个功能

本文介绍了如何在AirPods Pro上使用降噪功能&#xff0c;如何关闭它&#xff0c;以及该功能的工作原理。 AirPods Pro和AirPods Max支持降噪。你的设备必须运行iOS 13.2或iPadOS 13.2或更高版本才能使用降噪。 如何在AirPods Pro上打开降噪功能 AirPods Pro凭借其噪音控制功…

leetCode 30.串联所有单词的子串

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 "abcdef&…

如何利用示波器解析I2C数据

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘校园大使&#xff0c;湖南区域的日常实习&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &am…

【5G PHY】5G SS/PBCH块介绍(一)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

短视频矩阵打造攻略:玩转短视频

短视频矩阵系统是一个智能的短视频创作、发布、管理和分析的平台。该方法能够帮助用户迅速搭建起自身的短视频矩阵&#xff0c;并在多个平台上进行传播与展示&#xff0c;进而提升短视频的营销效率。该短视频矩阵系统具有如下基本功能&#xff1a; 1.短视频制作&#xff1a;为用…

队列的实现方式—Python数据结构(三)

队列 1. 定义 队列是一种常见的数据结构&#xff0c;用于按照先进先出&#xff08;FIFO&#xff09;的原则管理数据项。在Python中&#xff0c;有多种方法可以实现队列&#xff0c;其中最常见的包括使用列表&#xff08;list&#xff09;和使用标准库中的 queue 模块。队列通…

docker运行nginx镜像

今天在这里讲如何在docker上运行nignx镜像&#xff0c;并将配置文件和目录挂载到宿主机上&#xff0c;以实现方便统一的管理配置信息。 首先第一步需要拉取镜像&#xff0c;我们还是拉取最新的镜像&#xff0c;不需要添加tag版本号&#xff0c; docker pull nginx 拉取结束后用…

反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )

1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术&#xff0c;此时集合的泛型将不能产生约束了&#xff0c;此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型&#xff0c;在 编译成Class文件进入 运行阶段 的时候&a…

Zebec Protocol 薪酬支付工具 WageLink 上线,掀新一轮薪酬支付浪潮

Zebec Protocol 正在从多个方面推动流支付的应用&#xff0c;除了作为一种全新的支付手段来对支付领域进行重塑外&#xff0c;其也在以流支付体系为基础&#xff0c;不断地向薪酬发放领域深度的拓展。 在今年早些时候&#xff0c;Zebec Protocol 通过美国投资机构 Payroll Grow…

【类和对象+this引用】

文章目录 面向对象与面向过程面向对象关注的是对象&#xff0c;用类描述这个对象如何定义类如何更改类名 类的实例化this引用总结 面向对象与面向过程 面向对象就是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。 面向过程好比传统的洗衣服方式&#x…

【RNA world】RNA的多功能性与早期生命进化

文章目录 RNARNA plays core functions in Central Dogma of BiologyrRNAsnRNA RNA worldReplication催化作用感知环境变化并作出响应 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课 油管链接&#xff1a;6.047/6.878 Lecture 7 - RNA folding, RNA wo…

[尚硅谷React笔记]——第5章 React 路由

目录&#xff1a; 对SPA应用的理解对路由的理解前端路由原理路由的基本使用路由组件与一般组件NavLink的使用封装NavLink组件Switch的使用解决样式丢失问题路由的模糊匹配与严格匹配Redirect的使用嵌套路由向路由组件传递params参数向路由组件传递search参数.向路由组件传递st…

【Docker从入门到入土 3】Docker镜像的创建方法

Part3 一、Docker镜像1.1 镜像的概念1.2 镜像结构的分层 二、Docker镜像的创建2.1 基于现有镜像创建2.1.1 创建思路2.1.2 举个例子 2.2 基于本地模板创建2.3 基于Dockerfile 创建 三、Dockerfile 详解3.1 Dockerfile 操作指令3.1.1 常用的操作指令3.1.2 CMD和ENTRYPOINT的区别…

【Java基础面试四十一】、说一说你对static关键字的理解

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说你对static关键字…

hdlbits系列verilog解答(异或非门)-08

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型&#xff0c;它是一种单向的物理连线。它可以是输入也可以是输出&#xff0c;它与reg寄存器数据类型不同&#xff0c;它不能存储数据&#xff0c;只能…

文件系统相关

文件系统部分的大纲要求&#xff1a; 文件系统的全局结构&#xff1a;文件系统在外存中的结构&#xff0c;文件系统在内存中的结构外存空闲空间管理办法虚拟文件系统文件系统挂载 一、文件系统的层次结构 可分为三个层次&#xff1a;最低层是对象及其属性&#xff0c;中间层…

物证管理系统|智物证DW-S404是一套成熟系统

系统背景 我司物证智能管理系统&#xff08;智物证DW-S404&#xff09;是一套成熟系统&#xff0c;依托互3D技术、RFID技术、数据库技术、AI、视频分析技术对物证进行统一管理、分析的信息化、智能化、规范化的系统。 物证是公安或者监狱处理案件的关键凭证&#xff0c;针对过…

3交换机的配置与使用

越来越发觉大学的教程是真好&#xff0c;虽然说深度可能不太够&#xff0c;但作为入门实在太好了。中国也有公开课&#xff0c;推荐中国大学MOOC&#xff0c;感谢网易有道与高教社。 最近特别累、活也特别多&#xff0c;所以学习的时间少了很多。但看到MOOC之后&#xff0c;又…

软件测试(六)自动化测试 Junit5

Junit5 selenium是自动化测试框架&#xff08;写自动化测试用例&#xff09;Junit单元测试框架&#xff08;管理写好的测试用例&#xff09; 注解&#xff1a;Test&#xff0c;Disable &#xff0c;BeforeAll&#xff0c;AfterAll&#xff0c;BeforeEach&#xff0c;AfteEach…