算法随笔_59: 子数组最小乘积的最大值
上一篇:算法随笔_58: 队列中可以看到的人数-CSDN博客
=====
题目描述如下:
一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。
- 比方说,数组
[3,2,5]
(最小值是2
)的最小乘积为2 * (3+2+5) = 2 * 10 = 20
。
给你一个正整数数组 nums
,请你返回 nums
任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 10**9 + 7
取余 的结果。
请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最大值在 不取余 的情况下可以用 64 位有符号整数 保存。
子数组 定义为一个数组的 连续 部分。
示例 1:
输入:nums = [1,2,3,2] 输出:14 解释:最小乘积的最大值由子数组 [2,3,2] (最小值是 2)得到。 2 * (2+3+2) = 2 * 7 = 14 。
=====
算法思路:
由于任意一个子数组的最小值必然是原数组中的某一个元素,因此我们可以把以某一个元素nums[i]为最小值的所有子数组都找出来,我们设这些数组的集合为set[i]。我们先找出set[i]的最小乘积的最大值score[i]。然后,再取所有score[i]的最大值即为本题的答案。
那score[i]怎么找呢?因为nums[i]的值是固定的,且题目提到原数组都是正数,因此我们需要向nums[i]的左右两侧尽可能的扩展,这样才能找到最大的数组和。一直要扩展到出现比nums[i]小的数nums[j]时为止。当然扩展的区间里不能包含nums[j]。
那么如何高效的找出nums[i]的最大左边界呢?
上面提到一直要扩展到出现比nums[i]小的数nums[j]时为止。我们可以通过维护一个单调栈stck来完成所有nums[i]的最大左边界的统计。我们设数组lEdge存储每个元素的最大左边界。数组rEdge存储最大右边界。
我们从左往右枚举原数组,当数值不断递增时,我们把nums[i]加入stck。lEdge[i]就等于i。因为nums[i]的左侧是比它小的数。nums[i]的最大左边界就是它本身。
当数值nums[i]下降或相等时,我们不断弹出栈顶元素stck[-1],直到碰到小于nums[i]的元素,那么lEdge[i]就等于当前的stck[-1]+1。加1,表示我们要取最后一个弹出的下标值才是最大左边界。如果stck为空,那么lEdge[i]就等于0,即,数组的起始处。
枚举完所有元素后,就统计出了所有的最大左边界。同理,我们从右往左,可以统计出所有元素的最大右边界,并存入rEdge。
完成所有的左右边界计算后,我们就可以计算出所有的score[i]。最大的score[i]即为最终答案。注意最后的答案要 10**9 + 7 取余。
由于每个元素只会入栈和出栈一次,所以时间复杂度为O(n) 。下面是代码实现:
class Solution(object):def maxSumMinProduct(self, nums):""":type nums: List[int]:rtype: int"""nums_len=len(nums)lEdge=[0]*nums_lenrEdge=[0]*nums_lenpre_sum=[0]*nums_lenstck=[]for i in range(nums_len):while stck and nums[i] <= nums[stck[-1]]:stck.pop()lEdge[i]=stck[-1]+1 if stck else 0stck.append(i)pre_sum[i]=pre_sum[i-1]+nums[i] if i>0 else nums[i]stck=[]for i in range(nums_len-1, -1, -1):while stck and nums[i] <= nums[stck[-1]]:stck.pop()rEdge[i]=stck[-1]-1 if stck else nums_len-1stck.append(i)res=0for i in range(nums_len):tmpRes=nums[i] * (pre_sum[rEdge[i]]-pre_sum[lEdge[i]]+nums[lEdge[i]])res=max(res, tmpRes)res=res%(10**9+7)return res
关键词: 单调栈
相关文章:
算法随笔_59: 子数组最小乘积的最大值
上一篇:算法随笔_58: 队列中可以看到的人数-CSDN博客 题目描述如下: 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。 比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (325) 2 * 10 20 。 给你一个正整数数组 nums …...
线性模型 - 支持向量机延伸
为了更好的理解支持向量机模型,本文我们延伸学习和理解一下和支持向量机相关的一些概念,这些概念都是偏理论和数学的知识,比较抽象和复杂,而且需要一定的高等数学知识。大家可以先明白其所包含的意义,然后逐步深入理解…...
力扣3464. 正方形上的点之间的最大距离
力扣3464. 正方形上的点之间的最大距离 题目 题目解析及思路 题目要求在points集合中找出k个点,k个点之间的最小的曼哈顿距离的最大值 最大最小值的题一般直接想到二分 将正方形往右展开成一条线,此时曼哈顿距离为两点直线距离**(仅起点右边的点)** …...
AI数字人源码搭建部署指南
为实现AI数字人的智能交互功能,需开发包含语音识别、自然语言处理、机器学习等技术的AI算法和模型。利用TensorFlow、PyTorch等深度学习框架完成模型训练。具体步骤包括以下四个方面: 需求分析:通过市场调研、用户访谈、专家咨询等方式&…...
智能拖把控制板开发
智能拖把控制板开发全流程解析 一、硬件架构与H桥驱动设计 工程师小明选用四颗AO3400A低导通电阻MOS管构建H桥驱动拓扑,实测全桥导通电阻仅15mΩ,较传统方案降低40%损耗。通过优化PCB布局将驱动环路电感控制在15nH以内,配合10kHz互补PWM信号…...
【Swift 算法实战】利用 KMP 算法高效求解最短回文串
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
【数字化转型+AI:现代企业腾飞的一对翅膀】
——解析数字时代的核心竞争力 在全球化竞争与技术迭代加速的今天,传统企业若想突破增长瓶颈,必须抓住两大核心驱动力:数字化转型与人工智能(AI)。这两大技术如同企业腾飞的双翼,共同构建敏捷性、创…...
Zabbix——踩坑HttpRequest,header添加无效
背景 在试图尝试通过Zabbix接入DeepSeek API的时候,由于使用了HTTP的方式,所以需要使用Zabbix 自带的HttpRequest库进行请求,产生了下面的问题 问题 curl curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completio…...
MTK Android12 预装apk可卸载
文章目录 需求解决方法1、device/mediatek/mt6761/device.mk2、/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt3、路径:4、Android.mk 需求 近期,客户需要预装一个apk,同时该apk要可卸载。解…...
让网页“浪“起来:打造会呼吸的波浪背景
每次打开那些让人眼前一亮的网页时,你是否有注意到那些看似随波逐流的动态背景?今天咱们不聊高深的技术,就用最朴素的CSS,来解锁这个让页面瞬间鲜活的秘籍。无需JavaScript,不用复杂框架,准备好一杯咖啡&am…...
YOLO11的单独推理程序
YOLO11的单独推理程序,可以实例化加载一次多次推理。 YOLO11的单独推理程序,可以实例化加载一次多次推理。 YOLO11的单独推理程序,可以实例化加载一次多次推理。 YOLO11的单独推理程序,可以实例化加载一次多次推理。 YOLO11的单独推理程序,可以实例化加载一次多次推理…...
代码随想录day21
669.修剪二叉搜索树 //理解修建后重建树的概念 TreeNode* trimBST(TreeNode* root, int low, int high) {if(root nullptr) return nullptr;if(root->val < low){TreeNode* node trimBST(root->right, low, high);return node;}if(root->val > high){TreeNod…...
利用Ai对生成的测试用例进行用例评审
利用AI对生成的测试用例进行用例评审,可以从用例的完整性、有效性、一致性等多个维度展开,借助自然语言处理、机器学习等技术,提高评审效率和准确性。以下为你详细介绍具体方法: 1. 需求匹配度评审 利用自然语言处理(NLP)技术 步骤:首先将软件需求文档和生成的测试用例…...
JAVAweb-JS基本数据类型,变量,DOM,pop,push函数,事件
JavaScript,可以嵌套在静态页面中添加一些动态语言. JavaScript是开发web脚本语言,但也被用到了很多非浏览器环境中,比如node平台 JS可以嵌套在静态页面中可以给静态页面添加一些动态效果(脚本语言),不同浏览器厂商(在浏览器中都有内置解析器解析JS语法) <!DOCTYPE html&g…...
SpringBoot源码解析(十一):准备应用上下文
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
Python CNN基于深度学习的轴承故障智能检测平台
一、 项目概述 本项目旨在利用深度学习技术,构建一个基于Python的轴承故障智能检测平台。该平台能够对轴承的振动信号进行分析,自动识别轴承的健康状态,并判断故障类型,从而实现轴承故障的早期预警和诊断,提高设备的运…...
CCNP知识笔记
路由选路原理 路由信息来源 路由信息怎么来的? 直连路由(C): 通过直连接口UP产生智联路由条目(物理层UP数据链路层UP) 静态路由(S): 通过网络管理员逐条写入的路由条…...
递归树求解递归方程
*递归树是迭代计算模型 *递归树的生成过程与迭代过程一致 *根据递归定义不断扩展递归树,直到边界条件(其值已知) *对递归树产生的所有项求和就是递归方程的解 例一: T(n) 1 n1 T(n) 2T(n/2) n n>1 对于…...
2025年【熔化焊接与热切割】找解析及熔化焊接与热切割模拟试题
在当今工业领域,熔化焊接与热切割技术作为重要的加工手段,广泛应用于各种金属结构的制造与维修中。然而,这些作业过程伴随着高风险,对从业人员的安全知识和技能提出了极高的要求。为了提升相关人员的安全意识和操作技能࿰…...
Linux系统:服务器常见服务默认IP端口合集
服务器的默认IP端口取决于所使用的协议和服务类型。以下是一些常见服务和协议的默认端口: 服务端口实例: HTTP服务 默认端口:80 说明:用于普通的HTTP网页访问。例如,访问 http://example.com 时,默认使用8…...
LangChain教程 - RAG - PDF摘要
系列文章索引 LangChain教程 - 系列文章 随着人工智能和大语言模型(LLM)的快速发展,越来越多的工具和平台被引入以简化我们的日常任务。LangChain是一个非常强大的框架,它能够帮助开发者构建与LLM(如OpenAI、Ollama等…...
[java基础-JVM篇]3_JVM类加载机制
摘要:JVM通过设立不同优先级和职责的加载器保证了类加载的安全性与灵活性,即双亲委派机制,但是实际生产中更复杂的需求又需要破坏双亲委派,即打破JVM约定过的类加载程序 目录 类的生命周期 类加载 加载 类加载器 双亲委派机制…...
相似性搜索(2)
在本篇中,我们通过播客相似性搜索为例,进一步研究基于chroma 的相似性搜索: 参考: https://www.kaggle.com/code/switkowski/building-a-podcast-recommendation-engine/notebook 数据集来源: https://www.kaggle.…...
Linux 本地部署 Deepseek-R1 大模型!
DeepSeek-R1 的发布,掀起了一场风暴! 开源、强大、本地可部署,真正私有的 AI 助手,不受网络、隐私等限制,数据安全感直接拉满! 今天,手把手带你在 Linux 上本地部署 DeepSeek-R1,关…...
软件测试高频面试题
以下是一些软件测试高频面试题: 基础概念类 HTTP和HTTPS的区别:HTTPS使用SSL/TLS协议对传输数据加密,HTTP没有加密;HTTPS可确保数据完整性,防止传输中被篡改,HTTP不保证;HTTP默认用80端口&…...
光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验
前言 在蓝牙音箱市场竞争日益激烈的当下,开发一款性能卓越且易于上手的蓝牙音箱,成为众多厂商追求的目标。而光明谷科技有限公司推出的 AT 指令版本的蓝牙音箱 SOC,无疑为行业带来了全新的解决方案,以其诸多独特卖点,迅…...
数据安全_笔记系列01:数据分类分级与敏感数据识别详解
数据安全_笔记系列01:数据分类分级与敏感数据识别详解 1)、数据分类分级与敏感数据识别详解 数据分类分级是数据安全治理的核心环节,旨在根据数据的敏感性和重要性,制定差异化的保护策略。以下从 定义、法规、方法、工具、案例 等维度全面解…...
SOUI基于Zint生成UPC码
UPC 码(Universal Product Code,通用产品代码)是一种广泛使用的条形码系统,主要用于零售商品的标识和追踪。有两种主要格式:UPC-A 和 UPC-E。 UPC-A 长度12位数字。适用于大型商品 UPC-E 长度8位数字。UPC-E是UPC-A…...
MySQL 主从同步延迟:原因剖析与解决之道
在现代数据库应用中,MySQL 的主从同步是一种常见且重要的架构模式,它能提供数据备份、读写分离等诸多优势,有效提升系统的可用性和性能。然而,主从同步延迟问题却常常困扰着数据库管理员和开发者,严重时甚至会影响业务…...
C语言数据结构—二叉树的链式结构实现
目录 1、建立二叉树 1.1 二叉树的结构 1.2 手动建立二叉树 2、二叉树的遍历 2.1 二叉树的三种遍历方式 2.1.1 前序遍历 2.1.2 中序遍历 2.1.2 后序遍历 3、求二叉树的结点数和二叉树的高度 3.1 求二叉树结点数 3.2 求二叉树叶子结点 3.3 求二叉树第k层结点的个数 …...
sysbench压测pgsql数据库 —— 筑梦之路
这里主要使用sysbench工具对Pgsql数据库进行基准测试。 1. 创建数据库和用户名 # 创建用户和数据库CREATE USER sysbench WITH PASSWORD 123456;CREATE DATABASE sysbench owner sysbench;# 给用户授权访问 vim pg_hba.confhost sysbench sysbench 127…...
超级详细Spring AI运用Ollama大模型
大模型工具Ollama 官网:https://ollama.com/ Ollama是一个用于部署和运行各种开源大模型的工具; 它能够帮助用户快速在本地运行各种大模型,极大地简化了大模型在本地运行的过程。用户通过执行几条命令就能在本地运行开源大模型,如Lama 2等; 综上&#x…...
CF934B A Prosperous Lot
算法:贪心 rating : 1200 思路: 题目要求输出的数不能超过10^18; 10^18共有19位,那么不超过范围的前提下最多能输出几个环呢? 环最多为2个,也就是数字8,不超过数据范围的情况下能输出18个8…...
四步彻底卸载IDEA!!!
各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好,我们今天来学习四步彻底卸载IDEA!!! 首先我要提醒各位 如果你想删除 IDEA 相关…...
基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
快速搭建SOCKS5代理服务器教程(一键多ip脚本)
文章目录 前言环境要求一、先看效果二、使用一键脚本总结 前言 华为云服务器一键搭建一拖10 或者20 ip 脚本 环境要求 操作系统:CentOS 7.8服务器:建议至少1核1G配置云服务器 可多ip 搭建一键输出 一、先看效果 二、使用一键脚本 yum install -y wge…...
鸿蒙ArkTS页面如何与H5页面交互?
鸿蒙页面如何与H5页面交互? 先看效果前言通信功能介绍Web组件使用问题 Harmony OS NEXT版本(接口及解决方案兼容API12版本或以上版本) 先看效果 功能介绍 点击Click Me按钮可以接收展示鸿蒙传递给html的内容点击霓虹灯按钮可以同步更新底部鸿蒙页面的按…...
深度解析SmartGBD助力Android音视频数据接入GB28181平台
在当今数字化时代,视频监控与音视频通信技术在各行各业的应用愈发广泛。GB28181协议作为中国国家标准,为视频监控设备的互联互通提供了规范,但在实际应用中,许多Android终端设备并不具备国标音视频能力,这限制了其在相…...
软件安全测评报告内容和作用简析,如何获取权威安全测评报告?
软件安全测评报告是对软件系统进行安全性评估后形成的一份详细文档。它通过对软件系统的设计、实现及运行环境等多个方面进行系统性分析,以识别潜在的安全风险和漏洞。该报告不仅包含漏洞的详细信息和修复建议,也是对软件开发者和管理者的重要决策支持工…...
leetcode 207. 课程表
题目如下 数据范围 做题之前先搞清楚一个概念:拓扑序列 即在一个简单图内找一个入度为0的节点, 删除这个节点并删去与之相连接的边并把这条边连接的节点入度减一(如果存在)。 如此循环往复直到图内不存在节点我们认为拓扑序列存在。 那么在本题中参与课程的要求…...
第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database
4.4.1 数据库迁移原理 总结一下就是: 1. 数据库迁移命令的执行,其实就是生成在数据库执行的脚本代码(两个文件:数字_迁移名.cs 数字_迁移名.Designer.cs),用于对数据库进行定义和修饰。 2. 数据库迁移…...
PyEcharts 数据可视化:从入门到实战
一、PyEcharts 简介 PyEcharts 是基于百度开源可视化库 ECharts 的 Python 数据可视化工具,支持生成交互式的 HTML 格式图表。相较于 Matplotlib 等静态图表库,PyEcharts 具有以下优势: 丰富的图表类型(30)动态交互功…...
数仓搭建实操(传统数仓oracle):DWD数据明细层
数据处理思路 DWD层, 数据明细层>>数据清洗转换, 区分事实表,维度表 全是事实表,没有维度表>>不做处理 数据清洗>>数据类型varchar 变成varchar2, 日期格式统一(时间类型变成varchar2); 字符数据去空格 知识补充: varchar 存储定长字符类型 ; 存储的数据会…...
《Mycat核心技术》第17章:实现MySQL的读写分离
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
区块链(14):FISCO BCOS配置及使用控制台
1 获取控制台并回到fisco目录 cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh 2 拷贝控制台配置文件 若节点未采用默认端口,请将文件中的20200替换成节点对应的…...
react路由总结
目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…...
Python爬虫处理网页中的动态内容
文章目录 前言一、Python环境搭建1.Python安装2.选择Python开发环境 二、Python爬虫处理网页中的动态内容1. 使用 Selenium 库2. 使用 Pyppeteer 库3. 分析 API 请求 前言 在网页中,动态内容通常是指那些通过 JavaScript 在页面加载后动态生成或更新的内容…...
Lineageos 22.1(Android 15)Launcer简单调整初始化配置
一、前言 Launcer的初始化配置主要在如下的xml文件夹下,默认读取的5x5 这里我们把device_profiles调整一下,然后新建一个default_workspace_my.xml作为我们自己的配置就行。 二、配置 注意Lineageos 的Launcer是在lineageos/packages/apps/Trebuchet…...
计算机毕业设计SpringBoot+Vue.js教师工作量管理系统(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【Scrapy】Scrapy教程7——存储数据
上一节我们对爬虫程序的默认回调函数parse做了改写,提取的数据可以在Scrapy的日志中打印出来了,光打印肯定是不行的,还需要把数据存储,数据可以存到文件,也可以存到数据库,我们一一来看。 存储数据到文件 首先我们看看如何将数据存储到文件,在讲[[【Scrapy】Scrapy教程…...