LeetCode 2104. 子数组范围和(单调栈)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个整数数组 nums 。nums 中,子数组的 范围 是子数组中最大元素和最小元素的差值。

返回 nums 中 所有 子数组范围的 和 。

子数组是数组中一个连续 非空 的元素序列。

示例 1:
输入:nums = [1,2,3]
输出:4
解释:nums 的 6 个子数组如下所示:
[1],范围 = 最大 - 最小 = 1 - 1 = 0 
[2],范围 = 2 - 2 = 0
[3],范围 = 3 - 3 = 0
[1,2],范围 = 2 - 1 = 1
[2,3],范围 = 3 - 2 = 1
[1,2,3],范围 = 3 - 1 = 2
所有范围的和是 0 + 0 + 0 + 1 + 1 + 2 = 4示例 2:
输入:nums = [1,3,3]
输出:4
解释:nums 的 6 个子数组如下所示:
[1],范围 = 最大 - 最小 = 1 - 1 = 0
[3],范围 = 3 - 3 = 0
[3],范围 = 3 - 3 = 0
[1,3],范围 = 3 - 1 = 2
[3,3],范围 = 3 - 3 = 0
[1,3,3],范围 = 3 - 1 = 2
所有范围的和是 0 + 0 + 0 + 2 + 0 + 2 = 4示例 3:
输入:nums = [4,-2,-3,4,1]
输出:59
解释:nums 中所有子数组范围的和是 59提示:
1 <= nums.length <= 1000
-10^9 <= nums[i] <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-subarray-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 单调栈,获取每个数字作为最大或者最小的左右极限位置
  • 单独考虑每个数字可以作为最大值或者最小值的次数,到左右极限位置处的个数相乘种组合
class Solution:def subArrayRanges(self, nums: List[int]) -> int:def getRange(nums, neg):nums_ = copy.deepcopy(nums)if neg:for i in range(len(nums)):nums_[i] = -nums_[i] # 找最小值的左右区间,取个负数,逻辑跟正数一样L, R = list(range(len(nums))), list(range(len(nums)))q = []for i in range(len(nums)):while len(q) and nums_[q[-1]] < nums_[i]:q.pop()L[i] = q[-1]+1 if len(q) else 0q.append(i)q = []for i in reversed(range(len(nums))):while len(q) and nums_[q[-1]] <= nums_[i]:q.pop() # 注意上下只能有一个 = 号R[i] = q[-1]-1 if len(q) else (len(nums)-1)q.append(i)return L, RL1, R1 = getRange(nums, neg=False)L2, R2 = getRange(nums, neg=True)ans = 0for i in range(len(nums)):# print(L1[i], R1[i], L2[i], R2[i])ans += (R1[i]-i+1)*(i-L1[i]+1)*nums[i]-(R2[i]-i+1)*(i-L2[i]+1)*nums[i]return ans

140 ms 15.2 MB Python3


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

C++的虚函数表

这里的例子全部来自陈皓的C 虚函数表解析&#xff0c;经过修改的。 编译器&#xff1a;g (Ubuntu 4.9.2-10ubuntu13) 4.9.2 环境&#xff1a;ubuntu 15.04 64位系统&#xff08;地址占8字节&#xff09; 例子1&#xff1a; 1 #define LL long long2 3 class Base {4 public:5 …

Hadoop学习笔记—10.Shuffle过程那点事儿

Hadoop学习笔记—10.Shuffle过程那点事儿 一、回顾Reduce阶段三大步骤 在第四篇博文《初识MapReduce》中&#xff0c;我们认识了MapReduce的八大步骤&#xff0c;其中在Reduce阶段总共三个步骤&#xff0c;如下图所示&#xff1a; 其中&#xff0c;Step2.1就是一个Shuffle操作&…

已安装Anaconda情况下,命令行pip,python报错(详细 已解决)

已安装Anaconda情况下&#xff0c;命令行pip,python报错&#xff08;已解决&#xff09; 这是报错截图 解决方案如下&#xff1a; 1.首先可以去找到anaconda文件夹&#xff0c;并打开该文件目录下的Script文件夹&#xff0c;查看是否有pip.exe文件&#xff0c;并查看是否配置…

LeetCode 2105. 给植物浇水 II(双指针)

文章目录1. 题目2. 解题1. 题目 Alice 和 Bob 打算给花园里的 n 株植物浇水。 植物排成一行&#xff0c;从左到右进行标记&#xff0c;编号从 0 到 n - 1 。其中&#xff0c;第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。 Alice 和 Bob 每人有一个水罐&#x…

通过Cisco packet Tracer 划分vlan实现不同交换机间pc进行通信

通过Cisco packet Tracer 划分vlan实现不同交换机间pc进行通信 交换机端口类型介绍&#xff1a; vlan 1.命令行实现将端口 fa0/4 fa0/5 fa0/6分配到vlan3: 2.命令行实现两个交换机模式由access切换为trunk,使得不同交换机中相同vlan中的PC能够进行通信

linux xp镜像文件,让Windows XP镜像文件小一点儿(转)

让Windows XP镜像文件小一点儿(转)[more]近日笔者的一位朋友遇上件烦心事儿&#xff0c;他发现安装好Windows XP Professional和Services Pack 1a补丁升级文件后&#xff0c;其文件大小总和已达到1.7GB容量。而用Ghost备份后的lmage镜像文件也有1.2GB之大&#xff0c;不能将它储…

Packet Tracer配置交换机详细步骤(实验)

1.首先建立如下图所示的网络拓扑结构 这里需要注意 PC 与 交换机switch交换机之间的连线方式&#xff1a; 1&#xff09;连线方式选择 控制台连线 2&#xff09;switch 中需要选择 console接口&#xff1b; 3&#xff09;PC 中需要选择 RS 232接口 2.点击PC -> 选择桌面 -…

LeetCode 2108. 找出数组中的第一个回文字符串

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 words &#xff0c;找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串&#xff0c;返回一个 空字符串 “” 。 回文字符串 的定义为&#xff1a;如果一个字符串正着读和反着读一样&#xff0c;那么该字符…

Eclipse用法和技巧二十三:查看JDK源码

使用java开发&#xff0c;如果能阅读JDK的经典代码&#xff0c;对自己的水平提高是很有帮助的。笔者在实际工作中总结了两种阅读JDK源码的方式。第一种下载android源代码&#xff0c;直接在android源码代码中&#xff0c;这里的代码虽然不是标准的JDK源码&#xff0c;但是也很不…

pip install 时报错 ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问(已解决)

pip install 时报错 ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问&#xff08;已解决&#xff09; 这是报错截图&#xff1a; 解决方案如下&#xff1a; 在pip install 后面加上 --user 需要安装的包名 例如&#xff1a; pip inst…

linux取消中文网,SELinux如何关闭

SELinux如何关闭1、临时关闭SELinuxsetenforce 0 ##设置SELinux 成为permissive模式##setenforce 1 设置SELinux 成为enforcing模式2、永久关闭SELinux修改/etc/selinux/config 文件将SELINUXenforcing改为SELINUXdisabled&#xff0c;重启机器。3、查看SELinux状态◆ /usr/sbi…

LeetCode 2109. 向字符串添加空格

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 s &#xff0c;以及一个下标从 0 开始的整数数组 spaces 。 数组 spaces 描述原字符串中需要添加空格的下标。每个空格都应该插入到给定索引处的字符值 之前 。 例如&#xff0c;s "EnjoyYourCoffee&quo…

Packet Tracer 通过配置静态路由实现不同网段之间的通信(详细步骤)

Packet Tracer 通过配置静态路由实现不同网段之间的通信&#xff08;详细步骤&#xff09; 一、目标&#xff1a;ping通四个网段 二、解决方法&#xff1a;配置静态路由 1.拓扑结构布线图如下所示&#xff1a; 注意&#xff1a;这里省略了为每台PC配置IP地址 和 相对应的默认…

LeetCode 2110. 股票平滑下跌阶段的数目(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 prices &#xff0c;表示一支股票的历史每日股价&#xff0c;其中 prices[i] 是这支股票第 i 天的价格。 一个 平滑下降的阶段 定义为&#xff1a;对于 连续一天或者多天 &#xff0c;每日股价都比 前一日股价恰好少 1 &…

JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)

JavaScript Audio API自制简易音乐播放器&#xff08;详细完整版&#xff09; ** 音乐播放器的功能清单如下&#xff1a; ** 1.点击暂停按钮&#xff0c;歌曲暂停 2.点击播放按钮&#xff0c;歌曲播放 3.单曲循环与取消单曲循环 4.当播放到列表最后一首歌曲时&#xff0c;点…

jQuery实现PC端商城购物车模块基本功能(每个商品的小计和合计都会根据添加和删除的操作来动态计算)

jQuery实现PC端商城购物车模块基本功能 先上效果图&#xff1a; 因为主要是想练习jQuery的使用&#xff0c;所以页面CSS部分比较简陋&#xff0c;有需要的话&#xff0c;大家在参考代码时&#xff0c;可以自己再完善下CSS部分的代码&#xff0c;让购物车页面更加美观。 功能…

七、CSS 三大特性(完整详细解析)

** CSS 三大特性&#xff08;完整详细解析&#xff09; ** 1.优先级&#xff1a; 定义CSS样式时&#xff0c;经常出现两个或更多规则应用在同一元素上&#xff0c;此时&#xff0c; 选择器相同&#xff0c;则执行层叠性选择器不同&#xff0c;就会出现优先级的问题。 1&am…

LeetCode 2114. 句子中的最多单词数

文章目录1. 题目2. 解题1. 题目 一个 句子 由一些 单词 以及它们之间的单个空格组成&#xff0c;句子的开头和结尾不会有多余空格。 给你一个字符串数组 sentences &#xff0c;其中 sentences[i] 表示单个 句子 。 请你返回单个句子里 单词的最多数目 。 示例 1&#xff1…

一、css清除浮动方法学习笔记总结(超详细,简单易懂)

** css清除浮动方法学习笔记总结&#xff08;超详细&#xff0c;简单易懂&#xff09; ** 问题&#xff1a; 上图中&#xff0c;由于container(父级元素&#xff09;未设置高度&#xff0c;其内部子元素设置了float浮动&#xff0c;导致与container同级&#xff08;也就是co…

LeetCode 2115. 从给定原材料中找到所有可以做出的菜(拓扑排序)

文章目录1. 题目2. 解题1. 题目 你有 n 道不同菜的信息。给你一个字符串数组 recipes 和一个二维字符串数组 ingredients 。 第 i 道菜的名字为 recipes[i] &#xff0c;如果你有它 所有 的原材料 ingredients[i] &#xff0c;那么你可以 做出 这道菜。一道菜的原材料可能是 另…