码迷,mamicode.com
首页 > 编程语言 > 详细

动态规划-子数组乘积小于k的总个数 Subarray Product Less Than K

时间:2018-09-02 01:53:31      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:alt   end   inf   代码   ret   har   维护   滑动窗口   subarray   

2018-09-01 23:02:46

问题求解:

技术分享图片

问题求解:

最开始的时候,一眼看过去就是一条 dp 嘛,保存每个数字结尾的长度和,最后求和就好,至于长度如何求,本题中需要用滑动窗口来维护。

写好代码后,发现其实并不需要真正申请一个1000长度的数组来对每个数字进行保存,直接求和就好。

    public int numSubarrayProductLessThanK(int[] nums, int k) {
        int res = 0;
        int begin = 0;
        int cur = 1;
        for (int end = 0; end < nums.length; end++) {
            cur *= nums[end];
            while (begin <= end && cur >= k) {
                cur /= nums[begin];
                begin++;
            }
            if (end < begin) continue;
            res += end - begin + 1;
        }
        return res;
    }

 

动态规划-子数组乘积小于k的总个数 Subarray Product Less Than K

标签:alt   end   inf   代码   ret   har   维护   滑动窗口   subarray   

原文地址:https://www.cnblogs.com/TIMHY/p/9572048.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!