• 795. Number of Subarrays with Bounded Maximum


    We are given an array nums of positive integers, and two positive integers left and right (left <= right).

    Return the number of (contiguous, non-empty) subarrays such that the value of the maximum array element in that subarray is at least left and at most right.

    Example:
    Input: 
    nums = [2, 1, 4, 3]
    left = 2
    right = 3
    Output: 3
    Explanation: There are three subarrays that meet the requirements: [2], [2, 1], [3].
    

    Note:

    • leftright, and nums[i] will be an integer in the range [0, 109].
    • The length of nums will be in the range of [1, 50000].
    class Solution {
        public int numSubarrayBoundedMax(int[] n, int l, int r) {
            int j = 0, res = 0, count = 0;
            for(int i = 0; i < n.length; i++) {
                if(n[i] >= l && n[i] <= r) {
                    res += i - j + 1;
                    count = i - j + 1;
                }
                else if(n[i] < l) res += count;
                else {
                    j = i + 1;
                    count = 0;
                }
            }
            return res;
        }
    }

    2 pointers, j是合格subarray的起始点,count是目前为止的合格的subarray的长度,如果当前数字合格,就更新count和res。

    如果数字小于l,说明这个数不合格,但是前面的subarray仍然有可能合格,加上count。

    如果数字大于r,说明都用不了,重置j和count。

  • 相关阅读:
    C++注释
    python绘制动态图
    解决“<form>提交,CSRF验证失败。请求中止”
    Django相关的MTV
    AVplayer搭建ftp共享PC端
    02: 均值(1.5编程基础之循环控制)
    1.5编程基础之循环控制_ 01:求平均年龄
    for循环进阶
    找第k大的数
    c++中,bool与int 的区别
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/14898003.html
Copyright © 2020-2023  润新知