题目如下:

解题思路:我的想法对于数组中任意一个元素,找出其左右两边最近的小于自己的元素。例如[1,3,2,4,5,1],元素2左边比自己小的元素是1,那么大于自己的区间就是[3],右边的区间就是[4,5]。那么对于元素2来说,和左边区间合并组成[2,3]以及和右边区间合并组成[2,4,5],这两段区间包括2在内的所有subarray的最小值都是2,其分别可以组成的subarry的个数是 len([3])和len([4,5]),左右区间合并在一起可以组成的subarray的个数是len([3])*len([4,5]),再加上2本身自己组成一个独立的subarray [2],其总数就是 len([3]) + len([4,5]) + len([3])*len([4,5]) + 1,转成通项表达式就是 len(left) + len(right) + len(left)*len(right) + 1。怎么快速找到其左右两边最近的小于自己的元素?可以参考【leetcode】84. Largest Rectangle in Histogram 。

代码如下:

class Solution(object):
def sumSubarrayMins(self, A):
"""
:type A: List[int]
:rtype: int
"""
dic = {}
for i in range(len(A)):
if A[i] not in dic:
dic[A[i]] = 0
else:
dic[A[i]] += 1
A[i] = float(str(A[i]) + '.' + ''*dic[A[i]])
dp_left = [0] * len(A)
dp_left[0] = -1
for i in xrange(1, len(dp_left)):
j = i - 1
while A[i] <= A[j] and j != -1:
j = dp_left[j]
dp_left[i] = j
# print dp dp_right = [0] * len(A)
dp_right[-1] = len(A)
for i in xrange(len(dp_right) - 2, -1, -1):
j = i + 1
while j != len(A) and A[i] <= A[j]:
j = dp_right[j]
dp_right[i] = j res = 0
for i in range(len(A)):
left = i - dp_left[i] - 1
right = dp_right[i] - i - 1
A[i] = int(A[i])
res += (left*A[i] + right*A[i] + (left*right)*A[i] + A[i])
#print A[i],res
#print dp_left
#print dp_right
return res % (pow(10,9) + 7)

最新文章

  1. 【腾讯Bugly干货分享】聊聊苹果的Bug - iOS 10 nano_free Crash
  2. PHP基础班初学心得:脑洞实验-JS变量存储函数与return的一些问题
  3. select 和 input 的不可编辑,input隐藏
  4. Zepto 实现checkbox全选与全不选状态切换
  5. ROC曲线绘制
  6. Knight Moves
  7. njoj 1251 zlly长了一张包子脸
  8. HDU 1711 (裸KMP) Number Sequence
  9. 关于Spring中的PagedListHolder分页类的分析
  10. 终端管理软件tmux
  11. TCP连接建立系列 — 连接请求块
  12. mysql自动删除90天前数据
  13. catalog start with + switch database to copy的妙用
  14. 学习笔记20—MATLAB特殊函数
  15. Git for Windows之团队合作
  16. noip 2013 提高组 Day2 部分题解
  17. 如何监控执行的SQL语句?
  18. python map函数的使用
  19. 黄聪:WIN7下回收站不小心删除的文件怎么恢复,免费数据恢复软件下载
  20. Java反射API研究(2)——java.lang.reflect详细内容与关系

热门文章

  1. 51nod 1714:B君的游戏(博弈 sg打表)
  2. mysql 查询所有子节点
  3. Hadoop编程调用HDFS(JAVA)
  4. operator函数操作符
  5. 27 October in ss
  6. docker 部署netcore 的关键语句
  7. 强哥新周报SQL
  8. 15. Jmeter-配置元件二
  9. 13. Jmeter-定时器
  10. docker使用记录二:mysql安装与配置