本文共 1210 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找出数组中乘积小于给定值k的连续子数组的个数。直接遍历所有可能的子数组会导致时间复杂度过高,因此我们采用了滑动窗口的方法来优化解答过程。
我们使用滑动窗口的方法来解决这个问题,具体步骤如下:
prod为1,用于记录当前窗口内所有元素的乘积,ans为0,用于记录符合条件的子数组个数,left为左指针,用于调整窗口的左边界。ans中。这种方法的时间复杂度是O(n),其中n是数组的长度,能够在合理时间内处理大规模数据。
package Solution713;import java.math.BigDecimal;class Solution { public int numSubarrayProductLessThanK(int[] nums, int k) { if (k <= 1) { return 0; } BigDecimal prod = new BigDecimal(1); int ans = 0; int left = 0; for (int right = 0; right < nums.length; right++) { prod = prod.multiply(new BigDecimal(nums[right])); while (prod.compareTo(new BigDecimal(k)) >= 0) { prod = prod.divide(new BigDecimal(nums[left])); left++; } ans += right - left + 1; } return ans; }} prod初始化为1,表示当前窗口的乘积,left初始化为0,表示左指针的位置。ans中。这种方法高效且简洁,能够在O(n)的时间复杂度内解决问题,适用于处理大规模数据。
转载地址:http://umniz.baihongyu.com/