Leetcode - 周赛431

目录

一,3411. 最长乘积等价子数组

二,3412. 计算字符串的镜像分数

三,3413. 收集连续 K 个袋子可以获得的最多硬币数量

四,3414. 不重叠区间的最大得分


一,3411. 最长乘积等价子数组

本题数据范围小,直接暴力枚举,代码如下:

class Solution {public int maxLength(int[] nums) {int n = nums.length;int ans = 0;for(int l=0; l<n; l++){for(int r=l; r<n; r++){int p = 1, g = 0, lc = 1;for(int i=l; i<=r; i++){p *= nums[i];g = gcd(nums[i], g);lc = lcm(nums[i], lc);}if(p == g * lc) ans = Math.max(ans, r-l+1);}}return ans;}int gcd(int a, int b){return b==0?a:gcd(b,a%b);}int lcm(int a, int b){return a*b/gcd(a,b);}
}

二,3412. 计算字符串的镜像分数

本题就是要存储26个字母的出现的所有下标,对于 s[i] 来说,需要找到相应镜像的字母 c,然后返回字母 c 最近的下标,也就是说,需要一个先进后出的数据结构——栈来存储 26 个字母的下标,代码如下:

class Solution {public long calculateScore(String s) {Stack<Integer>[] st = new Stack[26];Arrays.setAll(st, e->new Stack<>());long ans = 0;for(int i=0; i<s.length(); i++){int c = s.charAt(i) - 'a';if(!st[25-c].isEmpty()){ans += i - st[25-c].pop();}else{st[c].push(i);}}return ans;}
}

三,3413. 收集连续 K 个袋子可以获得的最多硬币数量

本题求连续 k 个袋子可获得的最多硬币数量,就是维护一个长度为 k 的滑动窗口,关键的问题就变成了如何维护窗口的更新(进/出),求最多,贪心的想对于一个区间 [L,R],需要尽可能多的包含这个区间,那么有两种情况——以 L 为左端点,向右维护一个长为 k 的窗口;以 R 为右端点,向左维护一个长为 k 的窗口。需要分别求出上述两种情况,取最大值。

这里写以 L 为左端点,向右维护一个长为 k 的窗口的维护方法,另一种可以通过镜像的方式,复用此代码。如图所示:

代码如下:

class Solution {long window(int[][] f, int k){int n = f.length;long ans = 0;long cover = 0, uncover = 0;for(int i=0, j=0; i<n; i++){long l = f[i][0], r = f[i][1], c = f[i][2];cover += (r - l + 1) * c;while(f[j][1] < r - k + 1){cover -= (long)(f[j][1] - f[j][0] + 1) * f[j][2];j++;}uncover = Math.max((long)(r - k + 1 - f[j][0]) * f[j][2], 0) ;ans = Math.max(ans, cover - uncover);}return ans;}public long maximumCoins(int[][] coins, int k) {Arrays.sort(coins, (x, y) -> x[0] - y[0]);long ans = window(coins, k);for(int[] c : coins){int t = -c[0];c[0] = -c[1];c[1] = t;}int n = coins.length;for(int i=0; i<n/2; i++){int[] t = coins[i];coins[i] = coins[n-1-i];coins[n-1-i] = t;}return Math.max(ans, window(coins, k));}
}

四,3414. 不重叠区间的最大得分

定义f[i][j]: 在前 i 个区间选出 j 个不重叠区间的最大得分和此时字典序最小的区间下标顺序。标准的0-1背包做法,难点在于维护字典序最小的区间下标顺序。

代码如下:

class Solution {private record Tuple(long w, List<Integer> id){}private record Info(int l, int r, int w, int i){}public int[] maximumWeight(List<List<Integer>> intervals) {int n = intervals.size();Info[] t = new Info[n];for(int i=0; i<n; i++){List<Integer> x = intervals.get(i);int l = x.get(0), r = x.get(1), w = x.get(2);t[i] = new Info(l, r, w, i);}Arrays.sort(t, (x, y) -> x.r - y.r);Tuple[][] f = new Tuple[n+1][5];Arrays.setAll(f[0], e->new Tuple(0, new ArrayList<>()));for(int i=0; i<n; i++){int l = t[i].l, r = t[i].r, w = t[i].w;int k = search(t, l-1, i);f[i+1][0] = new Tuple(0, new ArrayList<>());for(int j=1; j<5; j++){long s1 = f[i][j].w;long s2 = f[k+1][j-1].w + w;if(s1 > s2){f[i+1][j] = f[i][j];continue;}List<Integer> tmp = new ArrayList<>(f[k+1][j-1].id);tmp.add(t[i].i);Collections.sort(tmp);if(s1 == s2 && compareLists(tmp, f[i][j].id) > 0){tmp = f[i][j].id;}f[i+1][j] = new Tuple(s2, tmp);}}return f[n][4].id.stream().mapToInt(v->v).toArray();}int compareLists(List<Integer> a, List<Integer> b){for(int i=0; i<Math.min(a.size(), b.size()); i++){if(!a.get(i).equals(b.get(i)))return a.get(i) - b.get(i);}return a.size() - b.size();}int search(Info[] t, int k, int r){int l = 0;while(l <= r){int mid = (l + r) >>> 1;if(t[mid].r <= k){l = mid + 1;}else{r = mid - 1;}}return l - 1;}
}

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

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

相关文章

深入Android架构(从线程到AIDL)_30 JNI架构原理_Java与C的对接03

目录 2.4 以C结构表达类(class)&#xff0c;并创建对象(object) 认识C函数指针 范例 2.5 在C函数里存取对象的属性(attribute) 范例 2.4 以C结构表达类(class)&#xff0c;并创建对象(object) 认识C函数指针 struct里不能定义函数本身&#xff0c;但能定义函数指针(func…

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion&#xff08;下&#xff09; 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

EasyExcel - 行合并策略(二级列表)

&#x1f63c;前言&#xff1a;博主在工作中又遇到了新的excel导出挑战&#xff1a;需要导出多条文章及其下联合作者的信息&#xff0c;简单的来说是一个二级列表的数据结构。 &#x1f575;️‍♂️思路&#xff1a;excel导出实际上是一行一行的记录&#xff0c;再根据条件对其…

软件测试面试题整理

一、人格相关问题 1、自我介绍结构 姓名工作年限简单介绍上家公司的行业主要负责内容个人优势短期内的职业规划应聘该岗位的原因 2、对未来的发展方向怎么看&#xff1f; 没有标准答案&#xff0c;职业规划来讲&#xff0c;可以分为技术层面和管理层面去说&#xff0c;技术…

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解&#xff0c;以至于经过.net这几年的发展进化&#xff0c;概念越来越多&#xff0c;越来越梳理不容易理解了。内心深处存在思想上的懒惰&#xff0c;以为自己专注于Unity开发就好&#xff0c;这些并不属于核心范畴&#xff0c;所以对这些概念总是…

CNN张量输入形状和特征图

CNN张量输入形状和特征图 这个是比较容易理解的张量的解释&#xff0c;比较直观 卷积神经网络 在这个神经网络编程系列中&#xff0c;我们正在逐步构建一个卷积神经网络&#xff08;CNN&#xff09;&#xff0c;所以让我们看看CNN的张量输入。 ​ ​ 在最后两篇文章中&…

【数据可视化-12】数据分析岗位招聘分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

(12)springMVC文件的上传

SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件&#xff08;记得添加乱码过滤&#xff09;配置springmvc-servlet文件&…

Ubuntu中双击自动运行shell脚本

方法1: 修改文件双击反应 参考: https://blog.csdn.net/miffywm/article/details/103382405 chmod x test.sh鼠标选中待执行文件&#xff0c;在窗口左上角edit菜单中选择preference设计双击执行快捷键&#xff0c;如下图&#xff1a; 方法2: 设置一个应用 参考: https://blo…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

金融项目实战 01|功能测试分析与设计

前置内容&#xff1a;金融项目准备的内容笔记可直接看如下笔记 只看&#xff1a;一、投资专业术语 和 二、项目简介 两部分文章浏览阅读2.3k次&#xff0c;点赞70次&#xff0c;收藏67次。安享智慧理财金融系统测试项目&#xff0c;测试用例&#xff0c;接口测试&#xff0c;金…

【Rust】控制流

目录 思维导图 一、选择结构 1. if表达式 2. 处理多个条件的else if 3. 使用if在let语句中 二、循环结构 1. loop 2. while循环 3. for循环 4. 使用范围Range进行循环 思维导图 一、选择结构 控制流是编程语言的基本构建块&#xff0c;Rust使用if表达式和循环来控制代…

FastDDS安装测试记录

1、安装依赖的软件 sudo apt install cmake g python3-pip wget git sudo apt install libasio-dev libtinyxml2-dev sudo apt install libssl-dev sudo apt install libp11-dev libengine-pkcs11-openssl sudo apt install softhsm22、安装foonathan_memory_vendor cd ~/Fas…

浅谈云计算01 | 云计算服务的特点

在当今数字化时代&#xff0c;云计算作为一种强大的技术解决方案&#xff0c;正逐渐改变着企业和个人对信息技术的使用方式。本文将详细探讨云计算的五个主要特点&#xff0c;包括按需自助服务、广泛的网络接入、资源池化、快速弹性伸缩以及可计量服务。 一、按需自助服务 云…

《使用 YOLOV8 和 KerasCV 进行高效目标检测》

《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者&#xff1a;Gitesh Chawda创建日期&#xff1a;2023/06/26最后修改时间&#xff1a;2023/06/26描述&#xff1a;使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 &#xff08;i&#xff09; 此示例使用 Keras 2 在 Colab 中…

vue3+ts+element-plus 对话框el-dialog设置圆角

对话框el-dialog设置圆角&#xff0c;实现的需求效果&#xff1a; 目前只能通过行内样式&#xff08;style"border-radius: 20px"&#xff09;来实现圆角效果&#xff1a;

pycharm-pyspark 环境安装

1、环境准备&#xff1a;java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

UnityXR Interaction Toolkit 如何检测HandGestures

前言 随着VR设备的不断发展,从最初的手柄操作,逐渐演变出了手部交互,即头显可以直接识别玩家的手部动作,来完成手柄的交互功能。我们今天就来介绍下如何使用Unity的XR Interaction Toolkit 来检测手势Hand Gesture。 环境配置 1.使用Unity 2021或者更高版本,创建一个项…

thinkphp 5.0 结合redis 做延迟队列,队列无法被消费

目录 一、Linux 环境下 二、如何验证消息队列被正确监听 一、Linux 环境下 项目部署在Linux 环境下&#xff0c;首先找到项目的部署路径&#xff0c;接着输入命令,这个命令是以守护进程方式进行监听你的队列&#xff0c;只要redis 不关闭 就可以一直监听这个队列 nohup php …

E10.【C语言】练习:编写一个猜数字游戏

目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了&#xff1a;游戏结束 猜错了&#xff1a;程序会告知猜大了或猜小了&#xff0c;继续进行游戏&#xff0c;直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架&#xff1a;循…