首页 > 其他分享 >795. 区间子数组个数

795. 区间子数组个数

时间:2022-11-24 19:12:04浏览次数:70  
标签:795 sta nums int 个数 len 数组 public

795. 区间子数组个数

class Solution {
    public int numSubarrayBoundedMax(int[] nums, int left, int right) {
        return (int) (cal(nums, right) - cal(nums, left - 1));
    }

    private long cal(int[] nums, int k) {
        int n = nums.length;
        long res = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] > k) continue;
            int j = i + 1;
            while (j < nums.length && nums[j] <= k) j++;
            int m = j - i;
            res += (long)m * (m + 1) / 2;
            i = j;
        }
        return res;
    }
}
class Solution {
    public int numSubarrayBoundedMax(int[] A, int L, int R) {
        return count(A,R)-count(A,L-1);
    }
    public int count(int[] A, int target){
        int cnt = 0; int res = 0;
        for(int x : A){
            if(x<=target){
                cnt++;
            }else{
                cnt = 0;
            }
            res += cnt;
        }
        return res;
    }
}
class Solution {
    public int numSubarrayBoundedMax(int[] A, int L, int R) {
        int len = A.length;
        Deque<Integer> sta = new ArrayDeque<>();
        int[] l = new int[len];
        int[] r = new int[len];
        for (int i = 0; i < len; i++) {
            while (!sta.isEmpty() && A[sta.peekLast()] < A[i]){
                int pre = sta.pollLast();
                r[pre] = i - 1;
            }
            l[i] = sta.isEmpty() ? 0 : sta.peekLast()+1;
            sta.addLast(i);
        }
        while (sta.size()>0){
            r[sta.pollLast()] = len - 1;
        }
        int ans = 0;
        for (int i = 0; i < len; i++) {
            if(A[i] >= L && A[i] <= R){
                ans += (r[i] - i + 1) * (i - l[i] + 1) ;
            }
        }
        return ans;
    }

    
}

标签:795,sta,nums,int,个数,len,数组,public
From: https://www.cnblogs.com/eiffelzero/p/16922929.html

相关文章

  • 区间子数组个数 增减字符串匹配 不含 AAA 或 BBB 的字符串
    795.区间子数组个数思路,最大值小于等于r的子区间的数目,减去最大值小于l的子区间的数目publicintnumSubarrayBoundedMax(int[]nums,intleft,intright){returnd......
  • 利用直接插入排序进行将数组序列从小到大排序
    1题目功能:直接插入排序描述:利用直接插入排序进行将数组序列从小到大排序2思路原始顺序:34,12,45,3,8,23,89,52,24,10在代码中将数组a[0]置为监视哨......
  • 一维数组的排序算法
    一维数组的排序算法冒泡排序气泡在水中向上涌数据在数组中不断的向前移动冒泡排序的过程代码运行publicclassarry7{publicstaticvoidmain(String[]args){......
  • java基础——二维数组基本概念
    之前我们已经知道什么是数组(一维数组)java基础——数组,数组的存取 这里补充一点: 数组本身是引用数据类型,数组的元素 可以是  基本数据类型 跟 引用数据类型 ......
  • js清空数组的正确做法
    EmptyinganarrayisacommonJavaScripttaskbuttoooftenIseethetaskperformedintheincorrectway.Manytimesdeveloperswillcreateanewarray:myArray......
  • php二维数组转一维数组的方法
    如下二维数组$arr=array(1){[0]=>array(1){["imgurl"]=>string(79)"/img/upload/microChatData/1/20161221/thumb/621fc7668474b47b43......
  • js对Json数组进行深复制
    在开发微信小程序的时候,很多时候我们传json对象的时候都需要小心,因为传进去的都是引用,所以有深复制Json对象的需求,方法如下:varbasicInfoTmp=JSON.parse(JSON.stringify(u......
  • 力扣349 两个数组的交集
    题目:给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。示例:输入:nums1=[1,2,2,1],nums......
  • 795. 区间子数组个数
    795.区间子数组个数给你一个整数数组nums和两个整数:left及right。找出nums中连续、非空且其中最大元素在范围 [left,right]内的子数组,并返回满足条件的子数组......
  • 数组的应用
    数组的应用遍历数组遍历数组就是获取数组中的每个元素遍历一维数组for循环遍历二维数组1.双for循环2.双foreach循环代码运行点击查看代码publicclassarry6{......