LeetCode 795. Number of Subarrays with Bounded Maximum
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 795. Number of Subarrays with Bounded Maximum
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題鏈接
LeetCode 795
題目解析
給定一個數組A,左右范圍L、R。求子數組的數量,要求:子數組最大值在L、R之間。
解題思路
子數組必須連續,利用最大值R對數組進行分段,設定變量 left 記錄每段開始位置(\(A[left] > R\),\(A[left+1] ≤ R\)),初始值為-1。
遍歷數組,通過A[i]大小判斷:
- 若 A[i] 在L、R之間,則 ans+=(i-j);
- 若 A[i] 大于R,則更改左界 left=i;
- 關鍵在于處理小于L的情況,由于需要子數組的最大值在L、R之間,單純的 A[i] 肯定不能算,需要知道最近合法的數字,即右界。設定變量 right 記錄合法的數字的右界(\(L ≤ A[right] ≤ R\)),當然,在A[i]大于R時,左界left和右界right都設置為i。這種情況下,ans += (i-left)-(i-right)。
參考代碼
class Solution { public:int numSubarrayBoundedMax(vector<int>& A, int L, int R) {int len = A.size();int ans = 0;int left = -1;//左界int right = -1;//最近合法位置for(int i=0; i<len; i++) {if(A[i] > R) {left = i;right = i;}else if(A[i]<L) {ans += (i-left)-(i-right);}else {ans += (i-left);right = i;}}return ans;} };LeetCode All in One題解匯總(持續更新中...)
本文版權歸作者AlvinZH和博客園所有,歡迎轉載和商用,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.
轉載于:https://www.cnblogs.com/AlvinZH/p/8527214.html
總結
以上是生活随笔為你收集整理的LeetCode 795. Number of Subarrays with Bounded Maximum的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibatis时间比较大小
- 下一篇: [ZJOI2008]生日聚会Party