列表

详情


2892. 将相邻元素相乘后得到最小化数组

给定一个整数数组 nums 和一个整数 k,你可以对数组执行以下操作任意次数:

返回 经过任意次数的操作后, nums 的 最小 可能长度。

 

示例 1:

输入:nums = [2,3,3,7,3,5], k = 20
输出:3
解释:我们执行以下操作:
1. [2,3,3,7,3,5] -> [6,3,7,3,5]
2. [6,3,7,3,5] -> [18,7,3,5]
3. [18,7,3,5] -> [18,7,15]
可以证明,在执行给定操作后,最小可能长度为3.

示例 2:

输入:nums = [3,3,3,3], k = 6
输出:4
解释:由于每两个相邻元素的乘积都大于 6,所以无法执行任何操作。因此,答案为 4。

 

约束条件:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int minArrayLength(vector<int>& nums, int k) { } };

python3 解法, 执行用时: 88 ms, 内存消耗: 27.5 MB, 提交时间: 2023-10-21 20:19:52

class Solution:
  def minArrayLength(self, nums: List[int], k: int) -> int:
      if 0 in nums: return 1
      res, sm = 0, k + 1
      for i in nums:
          if sm * i > k: sm, res = i, res + 1
          else: sm *= i
      return res

java 解法, 执行用时: 2 ms, 内存消耗: 54.8 MB, 提交时间: 2023-10-21 20:19:39

class Solution {
    public int minArrayLength(int[] nums, int k) {
        for(int x:nums) 
            if(x == 0) return 1;

        int n = nums.length, count = n;
        long product = nums[0];

        for(int i = 1; i < n; ++i){
            int x = nums[i];
            product *= x;
            if(product <= k)
               --count;
            else
               product = x;
        }
       
        return count;
    }
}

上一题