【问题标题】:number of subarrays whose product is even?乘积为偶数的子数组的数量?
【发布时间】:2020-07-20 19:39:45
【问题描述】:

给定一个大小为 n 的数组,n

【问题讨论】:

  • 展示你的天真方法。我觉得最坏情况的复杂度是 O(n^3),但是每个人都在本学期的 CS 课上遇到了子数组问题,所以我也是第一次学习。
  • 如果子数组中至少有一个偶数,则乘积变为偶数。您可以在 O(n) 时间内检查偶数元素的数量。其余的只是组合学,应该在 O(1) 中可行。自从我处理任何数学以来已经太久了,所以我无法提供公式 - 我想它只是所有组合的数量减去没有偶数的组合数量(但是会计算出来)。您可以尝试在Mathematics 上提问,但请阅读他们的tourhelp pages - 我不是那里的常客。
  • 你只需要找到至少包含一个偶数的子数组的数量。

标签: c++ arrays sub-array


【解决方案1】:

小心:从您的解释中,我的印象是您正在获取所有子数组,计算产品并检查它是否是偶数。

但是有一个非常重要的数学规则:当你有一系列自然数时,只要有一个偶数,乘积就会是偶数。

所以,我建议你编写以下算法:

  1. 在您的数组中搜索偶数。
  2. 计算包含偶数的子数组的数量。
  3. 在您的数组中搜索下一个偶数。
  4. 计算子数组的数量,包含下一个偶数,但不包含前一个偶数。
  5. 继续直到处理完数组中的所有偶数。

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2011-03-26
    • 1970-01-01
    • 2020-08-30
    • 2020-09-18
    相关资源
    最近更新 更多