713. 乘積小于K的子數(shù)組

713. 乘積小于K的子數(shù)組

問題

給定一個正整數(shù)數(shù)組 nums
找出該數(shù)組內(nèi)乘積小于 k 的連續(xù)的子數(shù)組的個數(shù)。

示例 1:

輸入: nums = [10,5,2,6], k = 100
輸出: 8
解釋: 8個乘積小于100的子數(shù)組分別為: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。

需要注意的是 [10,5,2] 并不是乘積小于100的子數(shù)組。

說明:

  • 0 < nums.length <= 50000
  • 0 < nums[i] < 1000
  • 0 <= k < 10^6

解法

第一想法是使用雙指針一直乘,當結(jié)果小于k時,將fast指針與slow指針之間的子數(shù)組數(shù)量加到結(jié)果result中。但是難點在于如何排重。
我們會注意到這樣一種規(guī)律:

  • fast等于slow時,其實只有一種子數(shù)組就是[nums[fast]]
  • fastslow之間的全部子數(shù)組,必然包含所有的fast-1slow之間的子數(shù)組

此時會發(fā)現(xiàn),fastfast-1子數(shù)組的區(qū)別僅在于是否包含nums[fast]元素,而包含全部nums[fast]元素的子數(shù)組數(shù)量為fast-slow+1,這個值,就排除了重復的子數(shù)組,result對這個數(shù)字進行暫存就可以在循環(huán)結(jié)束后直接得到數(shù)組數(shù)量。

當乘積不滿足條件時,乘積除以slow指針元素,slow指針前進,

代碼

java代碼

class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        // slow為慢指針,mul為slow與fast之間的乘積,result為滿足條件的數(shù)組個數(shù).
        int slow = 0, mul = 1, result = 0;
        for (int fast = 0; fast < nums.length; fast++) {
            // fast指針前移,mul計算新的乘積。
            mul *= nums[fast];
            //此時判斷mul是否已經(jīng)大于k了,當大于時,需要除slow元素直到滿足條件為止
            while (mul >= k && slow <= fast) {
                mul /= nums[slow++];
            }
            //這里可能會有疑問需不需要判斷slow與fast的大小,其實這里不需要判斷,前一步如果slow超過fast了,下一輪時,fast會趕上來。而且slow最多比fast多1,兩者相減再加一等于0,符合數(shù)組數(shù)量為0,不用擔心減成負數(shù)
            result += fast - slow + 1;
        }
        return result;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 線性表中的雙指針法是指通過兩個指針(游標)來指示線性表中的元素的方法。雙指針的使用本身并沒有什么神奇之處,但是通過...
    Like_eb56閱讀 574評論 0 0
  • 概要 64學時 3.5學分 章節(jié)安排 電子商務網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,813評論 0 3
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對這種結(jié)構(gòu)定義相應的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,595評論 0 13
  • 如果一個人焦慮、奔波、不安、上躥下跳,其實是因為他的存在感沒有被滿足。就像是生存在驅(qū)動動物奔波撕咬一樣,對存在感的...
    華筠沁閱讀 1,251評論 1 2
  • 十幾歲那時候,剛有了朦朧的世界觀萌芽但又不太成熟,想不明白宗教的作用是什么。 可能跟影視產(chǎn)品的宣傳也有關(guān)系,很容易...
    溫柔寒江雪閱讀 1,041評論 0 2

友情鏈接更多精彩內(nèi)容