当前位置: 首页> 教育> 幼教 > 力扣:962. 最大宽度坡

力扣:962. 最大宽度坡

时间:2025/7/13 8:20:48来源:https://blog.csdn.net/qq_74924951/article/details/141141454 浏览次数:0次

962. 最大宽度坡

这个题也是采用单调栈来做,但这道题要找每一个数右边离它最远且比它大的,也是每个数左边离他最远比他小的。

之前我们采用单调栈都是判断左边或右边离他最近的比他小的或大的,这个题不一样,但我们依然可以采用单调栈来做。

首先我们从数组左端建立一个单调递减的单调栈,每个元素与栈顶相比较,如果小就把下标加入进去。这里不用栈顶--,不用弹出,之前我们动态更新栈,这里我们只想建立递减一个栈而已。

显然数组里最小的元素的下标一定在栈里,假设其下标为i,则他所对应的最大宽度肯定是最右端下表-i,然后栈顶--,再让最右端与栈顶比较,由于栈中两元素之间的元素一定大于他俩,如果最右端比两元素都大,则在两元素所夹区间内,最右端元素的最大宽度是左端点,所以只需枚举右边与栈顶比较,小了右边就更新,直到栈为空。

class Solution {
public:int maxWidthRamp(vector<int>& nums) {int m=0;int stk[50005];int tt=1;stk[1]=0;for(int i=1;i<nums.size();i++){if(nums[i]<nums[stk[tt]])stk[++tt]=i;}for(int i=nums.size()-1;i>=0&&tt;i--){while(tt && nums[i]>=nums[stk[tt]]){m=max(m,i-stk[tt]);tt--;}}return m;}
};

关键字:力扣:962. 最大宽度坡

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: