LeetCode-795-区间子数组个数
创始人
2024-02-12 18:08:57
0

在这里插入图片描述

1、双指针

根据题意,我们可以将数组中的数分为这三类:1、小于leftleftleft的数;2、大于等于leftleftleft且小于等于rightrightright的数;3、大于rightrightright的数。因此若我们使用双指针来维护区间[last2,last1][last2,last1][last2,last1],其中我们让last1last1last1指向大于等于leftleftleft且小于等于rightrightright的数,last2last2last2指向大于rightrightright的数。因此当我们遍历每个位置iii时,此时区间右顶点固定在iii,左区间顶点可以落在(last2,last1](last2,last1](last2,last1]中,我们只要统计左区间顶点可能的个数即可。

class Solution {
public:int numSubarrayBoundedMax(vector& nums, int left, int right) {int res = 0, last2 = -1, last1 = -1;for (int i = 0; i < nums.size(); i++) {if (nums[i] >= left && nums[i] <= right) {last1 = i;} else if (nums[i] > right) {last2 = i;last1 = -1;}if (last1 != -1) {res += last1 - last2;}}return res;}
};

2、双指针优化

由于我们在方法一中所求的区间个数实质上是不包含第三类且至少包含一个第二类的数的区间,因此我们可以求出只包含第一类和第二类数字的区间总数,而后减去只包含第一类区间数字的总数即可。

class Solution {
public:int numSubarrayBoundedMax(vector& nums, int left, int right) {return count(nums, right) - count(nums, left - 1);}int count(vector& nums, int lower) {int res = 0, cur = 0;for (int x : nums) {cur = x <= lower ? cur + 1 : 0;res += cur;}return res;}
};

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...