给定一个正整数数组 nums。 找出该数组内乘积小于 k 的连续的子数组的个数。 来源:力扣(LeetCode) 304 ms 85.3 MB 1512 ms 18 MB
1. 题目
示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于100的子数组。 说明: 0 < nums.length <= 50000 0 < nums[i] < 1000 0 <= k < 10^6
链接:https://leetcode-cn.com/problems/subarray-product-less-than-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
class Solution { //C++ public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { if(k == 0) return 0; int i = 0, j = 0, count = 0, product = 1; while(j < nums.size()) { if(product*nums[j] < k) { //右端点一直乘 product *= nums[j]; count += j-i+1;//以j结尾的子数组个数 j++; } else// (product*nums[j] >= k) { //乘积大了,左端点移走 product /= nums[i++];//有>=k的数的时候,product可能会变成0 if(i > j) j++, product=1;//跳过该数字 } } return count; } };
class Solution:# py3 def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int: n = len(nums) i, j, count, product = 0, 0, 0, 1 while j < n: if product*nums[j] < k: product *= nums[j] count += j-i+1 j += 1 else: product /= nums[i] i += 1 if i > j: j += 1 product = 1 return count
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算