摘要:
给定数组H[n],表示柱状图中各个柱子的高度,每个柱子彼此相邻,且宽度为1。求该柱状图中,能够勾勒出来的矩形的最大面积。 1<=n<=1e5; 0<=H[i]<=1e4 枚举每个柱子作为最短时能得到的最大矩形,尽量往两边延伸,取最小值即为答案。 class Solution { public: in 阅读全文
摘要:
给定数组nums[n]和两个整数left,right,找出nums中连续非空、并且最大元素在[left,right]范围内的子数组,统计所有满足条件子数组的个数。 1<=n<=1e5; 0<=nums[i]<=1e9; 0<=left<=right<=1e9; 保证答案在int内 枚举每个元素作为最 阅读全文
摘要:
给定数组nums[n]和整数threshold,找到长度为k的子数组,满足子数组中每个元素都大于threshold/k,返回满足条件的任意一个k即可,如不存在,返回-1。 1<=n<=1e5; 1<=nums[i],threshold<=1e9 子数组每个元素都大于t,也就是最小值大于t。对于固定的 阅读全文
摘要:
给定数组arr[n],求所有子数组中最小值的和,答案对1e9+7取模。 1<=n<=30000; 1<=arr[i]<=30000 考虑每个数作为最小值对应的子数组有多少个,计算对答案的贡献,而子数组的个数可以用单调栈来维护。数组元素可能相同,为了避免重复计数,用半开半闭区间。 class Solu 阅读全文
摘要:
给定数组nums[n],子数组的范围指子数组中最大元素与最小元素的差值,返回nums中所有子数组的范围之和。子数组是数组的连续非空序列。 1<=n<=1000; -1e9<=nums[i]<=1e9 分别考虑每个元素作为最小和最大值的情况,统计作为最小值的次数,作为最大值的次数,这个可以用单调栈求出 阅读全文
摘要:
给定数组A[n],如果i<j,并且A[i]<=A[j],则称坡的宽度为j-i。求A中坡的最大宽度,如果不存在,返回0。 2<=n<=50000; 0<=A[i]<=50000 二维偏序问题,先按元素值排序去掉一维,将符合条件的元素加入集合,然后在集合中根据第二维找最优答案。 class Soluti 阅读全文
摘要:
n个能量发射站排成一行,第i个发射站的高度为H[i],并能向两边同时发射值为V[i]的能量,发射的能量只会被两边最近且比它高的发射站接收。求所有发射站里能接收的最大能量。 1<=n<=1e6; 1<=H[i]<=2e9; 1<=V[i]<=1e4 先用单调栈求出每个发射站发出的能量被谁接收,更新接收 阅读全文
摘要:
给定数组a[n],对于每个元素a[i],求后面第1个比它大的元素的下标,如果不存在,则用0表示。 1<=n<=3e6; 1<=a[i]<=1e9 单调栈和单调队列都是类似的套路,先循环把容器中不符合条件的元素弹出,然后更新答案,再将元素入队。 #include <bits/stdc++.h> usi 阅读全文