云小杰

相对于绝对成功的汲汲渴求,越无杂质的奔赴,越是动人。

要一个黄昏, 满是风, 和正在落下的夕阳。如此, 足够我爱这破碎泥泞的人间。


Download the theme

713. 乘积小于 k 的子数组

713. 乘积小于 K 的子数组

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 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 的子数组

示例 2:

输入:nums = [1,2,3], k = 0
输出:0

方法一:枚举

​ 其实我这个思路也算是滑动窗口,不过我的思路是固定左边界,右边界每次 +1,也是类似于枚举了。

    public int numSubarrayProductLessThanK(int[] nums, int k) {
        int length = nums.length, ans = 0;
        for (int i = 0; i < length; i++) {
            int curr = 1;
            for (int j = i; j < length; j++) {
                curr *= nums[j];
                if (curr < k) {
                    ans++;
                } else {
                    break;
                }
            }
        }
        return ans;
    }

方法二:滑动窗口

首先定义两个指针 leftright,后续遍历数组与记录用,

  • 左右指针起始均在位置 0 ;用右指针遍历数组,每次循环中右指针右移一次;
  • 移动过程中纪录从左指针到右指针路上的连续数的乘积为 mul
  • 如果乘积大于 k 了,则左指针右移,注意此处用的是 while 来使左指针右移,因为实际情况可能是:右指针最后右移一次指向了一个比较大的数使得 mul 不小于目标值,此时左指针需要右移多次才能使得 mul 刚小于 k;
  • 最后用 ans 记录 mul 小于 k 时的数组组合;
class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        int n = nums.length, ret = 0;
        int prod = 1, i = 0;
        for (int j = 0; j < n; j++) {
            prod *= nums[j];
            while (i <= j && prod >= k) {
                prod /= nums[i];
                i++;
            }
            ret += j - i + 1;
        }
        return ret;
    }
}
最近的文章

Learnswing

Swing1. GUI图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。Java提供了三个主要包做GUI开发: java.awt 包 – 主要提供字体/布局管理器 javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框) java.awt.event 包 – 事件处理,后台功能的实现。2. Swing组件如图所示:swing组件主要可分为三个部分: 顶层容器::常用...…

继续阅读
更早的文章

打家劫舍

打家劫舍198. 打家劫舍题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3...…

继续阅读