leetcode 第907题 子数组的最小值之和 python解法

博客详细解析了LeetCode第907题如何使用Python解决子数组最小值之和的问题。通过分析问题、提供思路,博主介绍了利用栈来优化解题的方法,并给出了具体的代码实现。同时还分享了其他优秀的解法链接供读者参考。
摘要由CSDN通过智能技术生成

leetcode 第907题 子数组的最小值之和 python解法

问题分析

问题如下(传送门),题目的意思是将数组所有的连续子数组找到,然后将所有子数组中的最小值找到并求和。
在这里插入图片描述
最简单的方法就是找到所有的子数组,然后得到最小值和。但这样最后肯定会超时的,不予考虑。
题目的提示是用栈来做这个题目,所以先往这方向上想。进一步分析,假设从数组的头部遍历,如果后面的数大于前面的数。那么这两个数构成的子数组取得肯定是前面的小的数;如果后面的数小于前面的数,那么子数组就得取后面的数。
那么先建立一个栈,这个栈中的元素是递增的,此外还建立一个辅助栈,这个栈主栈同时出入栈,大小保持一致。辅助栈每个元素包含两个数,第一个数是原数组在该元素前所有元素与此元素构成的子数组最小值和,第二个数就是此元素在原数组中前面连续小于它的数的个数。
以数组[]2, 4, 5, 3, 6]来做例子。刚开始为了保证栈不为空,所以先在栈中加入了0(原数组的所有数大于0)。那么2,4,5都是递增的所以直接加入主栈。在辅助栈中,2加入,与前面(实际上没有)元素构成的子数组最小值和为2,第二个加入4,它可以与2构成子数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值