leetcode1793--好子数组的最大分数

1. 题意

给定一个数组,求包含 a [ k ] a[k] a[k] m i n ( a r r ) × a r r . s i z e ( ) , s . t . a [ k ] ∈ a r r min(arr)\times arr.size(),s.t.a[k] \in arr min(arr)×arr.size(),s.t.a[k]arr
好子数组的最大分数

与柱形图面积相似,只是区间需要包含 a [ k ] a[k] a[k]

2. 题解

2.1 单调栈

求出左边第一个小和右边第一个小形成的区间包含 a [ k ] a[k] a[k]即可。

比原来代码多了一个判断。

class Solution {
public:int maximumScore(vector<int>& nums, int k) {int n = nums.size();stack<int> p;vector<int> left(n, -1);vector<int> right(n, n);for (int i = 0;i < n; ++i) {while (!p.empty() && nums[i] <= nums[p.top()])p.pop();if (!p.empty())left[i] = p.top();p.push(i);}p = stack<int>();for (int i = n - 1; ~i; --i) {while (!p.empty() && nums[i] <= nums[p.top()]) p.pop();if (!p.empty())right[i] = p.top();p.push(i);}int ans = 0;for (int i = 0;i < n; ++i) {if (left[i] < k && right[i] > k) {ans = max(ans, (right[i] - left[i] - 1) * nums[i]);}}return ans;}
};
2.2 双指针

我们从 k k k出发,那边的数比较大,我们就自增哪边;然后算此时区间的分数。

  • 自己代码
class Solution {
public:int maximumScore(vector<int>& nums, int k) {int n = nums.size();int left = k - 1, right = k + 1;int ans = nums[k];int minv = nums[k];while(left > -1 || right < n) {if (left > -1 && right < n) {if (nums[left] <= nums[right]){minv = min(minv, nums[right]);++right;}else {minv = min(minv, nums[left]);--left;}}else if ( left > -1) {minv = min(minv, nums[left]);--left;}else {minv = min(minv, nums[right]);++right;}ans = max(ans, (right - left - 1) * minv);}return ans;}
};
  • 灵神代码
    直接循环 n − 1 n-1 n1
class Solution {
public:int maximumScore(vector<int> &nums, int k) {int n = nums.size();int ans = nums[k], min_h = nums[k];int i = k, j = k;for (int t = 0; t < n - 1; t++) { // 循环 n-1 次if (j == n - 1 || i && nums[i - 1] > nums[j + 1]) {min_h = min(min_h, nums[--i]);} else {min_h = min(min_h, nums[++j]);}ans = max(ans, min_h * (j - i + 1));}return ans;}
};// 作者:灵茶山艾府

主要是证明正确性:

假设最大分数值的区间为 [ L , R ] [L,R] [L,R];

我们只需要证明当左指针 l p lp lp L L L时,右指针 r p rp rp一直移动到 R R R

和右指针 r p rp rp R R R时,左指针 l p lp lp一直移动到 R R R

假设 m i n ( a [ i ] ) = m , i ∈ [ L , R ] min\ (a[i]) = m, i \in [L,R] min (a[i])=m,i[L,R];

l p = L lp=L lp=L时, a [ l p − 1 ] < m a[lp - 1] \lt m a[lp1]<m一定成立;否则最大分数区间可以将该值包进来。

此时 a [ r p ] ≥ m > a [ l p ] a[rp] \ge m \gt a[lp] a[rp]m>a[lp],所以此时一定是 r p rp rp指针一直移动到 R R R

r p = R rp=R rp=R时同理,所以以哪边大移动哪边的策略一定能计算到最大分数区间。

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

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

相关文章

Linux课程____Samba文件共享服务

一、 Samba服务基础 SMB协议&#xff0c;服务消息块 CIFS协议&#xff0c;通用互联网文件系统 1.Samba 服务器的主要程序 smbd:提供对服务器中文件、打印资源的共享访问 nmbd:提供基于 NetBlOS 主机名称的解析 2.目录文件 /etc/samba/smb.conf 检查工具&#xff1a;test…

【力扣】387. 字符串中的第一个唯一字符

题目描述 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例 3: 输入: s “aabb” 输出: -1…

备战蓝桥杯Day30 - 贪心-活动选择问题

问题描述 假设有n个活动&#xff0c;这些活动要占用同一片场地&#xff0c;而场地在某时刻只能供一个活动使用。 每个活动都有一个开始时间 si 和结束时间 fi (题目中时间以整数表示) ,表示活动在[si, f)区间占用场地。 问:安排哪些活动能够使该场地举办的活动的个数最多? 解…

d3dcompiler_47.dll缺失怎么修复?分享五种方法

在计算机编程和游戏开发中&#xff0c;D3DCompiler47.dll文件是一个非常重要的组件。它是由微软公司开发的DirectX SDK的一部分&#xff0c;主要用于编译DirectX的Shader代码。然而&#xff0c;对于许多初学者和开发者来说&#xff0c;他们可能对这个文件的属性和功能并不完全了…

电商数据分析25——电商平台优惠券营销效果的数据分析

目录 写在开头1. 优惠券营销的战略意义1.1 优惠券对消费者行为的影响1.1.1 改变购买决策1.1.2 增加购买意愿 1.2 优惠券在促销活动中的应用1.2.1 提高产品销量1.2.2 增强市场占有率 2. 数据分析在优惠券营销中的应用2.1 优惠券使用率和转化率分析2.2 消费者行为分析与细分2.3 优…

python的O2O生鲜食品订购flask-django-nodejs-php

用户只能通过一些类似软件进行查看生鲜超市&#xff0c;这样的管理方式仍然是比较机械传统的&#xff0c;本文通过对市面上常见的线上管理系统与现实生活中结合问题的讨论&#xff0c;从一个微信小程序的O2O生鲜食品订购角度进行需求分析&#xff0c;提供一些新的思路&#xff…

基于SpringBoot实现文件上传和下载(详细讲解And附完整代码)

目录 一、基于SpringBoot实现文件上传和下载基于理论 二、详细操作步骤 文件上传步骤&#xff1a; 文件下载步骤&#xff1a; 三、前后端交互原理解释 四、小结 博主介绍&#xff1a;✌专注于前后端领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚…

RHCSA(第一天)

1.部署Linux环境&#xff1a; 安装Vmware之后&#xff0c;在windows会产生两个虚拟网卡&#xff1a;vmnet1&#xff0c; vmnet8 部署Linux&#xff1a;需要有网卡&#xff0c;必须要知道root用户的密码&#xff0c;和你普通的用户的用户名和密码 远程连接配置&#xff1a…

BGP报文、邻居状态

BGP报文&#xff1a; 1、OPEN报文&#xff1a;用于建立BGP邻居的连接&#xff0c;协商BGP参数的报文。 2、update报文&#xff1a;用于BGP邻居之间交互路由信息及路由属性的报文。 3、notification报文&#xff1a;差错报文&#xff0c;用于报错信息的传递&#xff0c;并且中…

LeetCode-热题100:1.两数之和

题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意…

Linux:文件读取指令

Linux&#xff1a;文件读取指令 cat指令more指令less指令head指令 & tail指令grep指令 cat指令 cat指令用于查看目标文件的内容。 语法&#xff1a;cat [选项][文件] 比如直接使用cat读取一个文件&#xff1a; 可以看到&#xff0c;其直接在指令的下方&#xff0c;输出了t…

Python中错误和异常的区别你搞清楚了吗?

​ 在Python编程的世界里&#xff0c;错误&#xff08;Error&#xff09;和异常&#xff08;Exception&#xff09;都是用来处理运行时出现的问题的。但它们之间有着微妙的差别&#xff0c;今天我们就来弄清楚。 错误&#xff08;Error&#xff09;通常指的是那些更严重、不可…

OrangeDAO联合创始人Don Ho确认出席Hack.Summit() 2024区块链开发者大会

随着Web3技术的快速发展&#xff0c;区块链领域备受关注的盛会——Hack.Summit() 2024 区块链开发者大会即将于 2024 年 4 月 9 日至 10 日在香港数码港隆重启幕。本次大会不仅是 Hack.Summit() 系列在亚洲的首次亮相&#xff0c;更象征着全球区块链行业对亚洲&#xff0c;尤其…

HBM产品在本财年内将为美光带来数亿美元的收入

美光科技&#xff0c;作为美国的主要内存制造商&#xff0c;得益于人工智能&#xff08;AI&#xff09;市场需求的增长&#xff0c;在截至2月份的上一季度成功扭亏为盈&#xff0c;并给出了乐观的财务预测。在3月20日的财报电话会议上&#xff0c;美光科技CEO桑杰梅赫罗特拉表示…

python基础知识(三)基本编程题,应用题

基本编程题 1.从键盘输入一个整数和一个字符&#xff0c;以逗号隔开&#xff0c;在屏慕上显示输出一条信息。 示例如下: 输入&#xff1a; 10, 输出&#xff1a; 10 s input("请输入一个整数和一个字符&#xff0c;用逗号隔开&#xff1a;")l s.split(",&q…

3.2 CSS选择器

3.2.1 元素选择器 在CSS中最常见的选择器就是元素选择器&#xff0c;即采用HTML文档中的元素名称进行样式规定。元素选择器又称为类型选择器&#xff0c;可以用于匹配HTML文档中某一个元素类型的所有元素。 例如&#xff0c;匹配所有的段落元素<p>&#xff0c;并将其背景…

基于Java的厦门旅游电子商务预订系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

GC日志打印

GC日志打印 java -jar -Xloggc:./gc-%t.log -XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintGCTimeStamps -XX:PrintGCCause -XX: UseGCLogFileRotation -XX:NumberOfGCLogFiles10 -XX:GCLogFileSize100M xxxxxx.jar%t 当前时间戳 -Xloggc:./gc-%t.log: 将日志记录到当前…

Linux之udp/tcp协议

之前我们已经初步了解了端口号&#xff01; 今天我们首先就要更加深入了解端口号&#xff01; 在 TCP/IP 协议中 , 用 " 源 IP", " 源端口号 ", " 目的 IP", " 目的端口号 ", " 协议号 " 这样一个五元组来标识一个通信 其…

LeetCode每日一题——x 的平方根

x 的平方根OJ链接&#xff1a;69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 乍一看题目只需要算一个数的平方根&#xff0c;根据我们之前学的C语言我们能很快的想到使用sqrt&#xff0c;pow这类的<math.h>库函数&#xf…