美文网首页
剑指 Offer II 009. 乘积小于 K 的子数组

剑指 Offer II 009. 乘积小于 K 的子数组

作者: 邦_ | 来源:发表于2022-04-11 10:15 被阅读0次

滑动窗口。。 想着一直移动左边界 右边界随i 但是时间上貌似执行时间比较长
下边是优化版本


func numSubarrayProductLessThanK(_ nums: [Int], _ k: Int) -> Int {

        if k <= 0 {
            return 0
        }
        
        
        var left = 0
        var count = 0
        
        while left != nums.count  {
            var product = 1

            for i in left..<nums.count {
                
                
                product *= nums[i]
                if product < k{
                 
                    count += 1
                }
                else {
                    left += 1
                    break
                    
                }
                if i == nums.count - 1 {
                    left += 1
                    break
                }
                
            }
                
            
        }
        
        return count
    }

比如某次遍历符合题意的子数组为 ABCX,那么在该条件下符合条件的有X,CX,BCX,ABCX共四个(可以进行多个例子,发现个数符合right-left+1)
所谓的规律。。可以减少循环,减少时间
k可以用1开始判断

func numSubarrayProductLessThanK(_ nums: [Int], _ k: Int) -> Int {

        if k <= 1 {
            return 0
        }
        
        var left = 0
        var count = 0
        var product = 1

        for i in 0..<nums.count {
            
            
            product *= nums[i]
            while left <= i && product >= k {
                
                product /= nums[left]
                left += 1
            }
            count += i >= left ? ( i - left + 1 ): 0
           
            
        }
     
        
        return count
    }
}





相关文章

网友评论

      本文标题:剑指 Offer II 009. 乘积小于 K 的子数组

      本文链接:https://www.haomeiwen.com/subject/pfkssrtx.html