剑指offer 乘积小于K的子数组

力扣题目链接

class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        if(k < 2) return 0;
        int i = 0,j = 0;
        int ans = 0;
        int x = 1;
        while(j < nums.length){
            x *= nums[j];
            //当l=r时就为1了,是小于k的不会越界,此时j-i+1也为0
            while(x >= k) x /= nums[i++];
            //此时保证了x是小于k的,相当于求右边界左边界为l,右边界为r的连续子数组的个数,
            //右边界是不断递增的,又因为是连续,所以满足条件的每种长度的子数组只会有一个
            //且右边界一直在变也就是不会重复
            ans += j-i+1;
            j++;
        }
        return ans;
    }
}

剑指offer 乘积小于K的子数组

上一篇:SAP Fiori 应用 My Appointment - Belonging to me, Search by team, Search by group


下一篇:2022寒假训练week6