zoukankan      html  css  js  c++  java
  • 713. 乘积小于K的子数组

    给定一个正整数数组 nums

    找出该数组内乘积小于 k 的连续的子数组的个数。

    示例 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
      class Solution {
      public:
          int numSubarrayProductLessThanK(vector<int>& nums, int k) {
              int count=0;
              int size=nums.size();
              // for(int i=0;i<size;i++)
              // {
              //     int sum=nums[i];
              //     int j=i;
              //     while(sum<k)
              //     {
              //         count++;
              //         if(j<size-1)
              //         {
              //          sum=sum*nums[++j];
              //         }
              //         else
              //         {
              //             break;
              //         }
              //     }
              // }
              int sum=1;
              int left=0;
              int right=0;
              
              while(right<size)
              {
                  sum*=nums[right++];
                  while(left<right && sum>=k){
                      sum/=nums[left++];
                  }
                  count+=right-left;
              }
              return count;
              //看了讨论,还是不完全明白这个算法--尺取法
              
              
          }
      };
  • 相关阅读:
    IO模型
    MySQL存储引擎问题
    Flask信号流程
    Flask应用运行流程
    Linux远程连接及常用指令
    Linux的安装与配置
    python GIL锁问题
    python深浅拷贝问题
    pyhton中的__new__和__init__
    直流调速系统Modelica基本模型
  • 原文地址:https://www.cnblogs.com/linxuemufeng/p/10807645.html
Copyright © 2011-2022 走看看