当前位置: 首页 > 知识库问答 >
问题:

奇数和子数组的计数个数

乐修远
2023-03-14
Input : arr[] = {5, 4, 4, 5, 1, 3} 
Output : 12
These are possible subarrays with odd sum. 
1) {5} Sum = 5 (At index 0)
2) {5, 4}  Sum = 9
3) {5, 4, 4}  Sum = 13 
4) {5, 4, 4, 5, 1} Sum = 19
5) {4, 4, 5}  Sum = 13
6) {4, 4, 5, 1, 3}  Sum = 17
7) {4, 5}  Sum = 9 
8) {4, 5, 1, 3} Sum = 13
9) {5}  Sum = 5 (At index 3)
10) {5, 1, 3}  Sum = 9
11)  {1} Sum = 1
12) {3} Sum = 3

但是如何在O(n)中解决这个问题呢?

共有1个答案

淳于哲
2023-03-14

下面是Java中的一个简单解决方案:

public class Odd {
  static int[] arr = { 5, 4, 4, 5, 1, 3 };

  public static void main(String... args) {
    int odd = 0;
    int even = 0;
    int result = 0;
    for (int i : arr) {
      if (i % 2 == 0) {
        even++;
      } else {
        int temp = even;
        even = odd;
        odd = temp + 1;
      }
      result += odd;
    }
    System.out.println(result);
  }

}

以下是其背后的逻辑:

我们正在遍历数组的所有元素(这就是为什么它将是O(n))。我们有3个辅助变量。Result包含所有已计数子数组的数目。Odd ad even包含以当前位置结束的奇数/偶数子数组。

 类似资料:
  • 我最近遇到一个问题如下。

  • 给定一个整数数组,我必须找到具有最大和的子数组,使得和是奇数。 但是我怎么把它扩展到和是奇数。 编辑 数组的所有元素都是整数和正数

  • 如何添加代码以查找此程序数组中的零?此代码可以计算偶数和奇数。我应该做一个不同的语句,还是可以添加另一个如果其他语句?

  • 该问题给出了两个输入:数组(arr)和由数组构成子数组的次数(n)。子数组的和应该是奇数 已经很清楚,如果所有的数字都是偶数。奇数和子数组是不可能的。对于奇数和,连续的2个数字应该是奇数+偶数或者偶数+奇数。但我似乎不能把它们分成N个子数组。请帮忙解释一下逻辑。

  • 给定一个整数数组和一个整数m,我如何找到所有包含m个奇整数的子数组?如果我的问题不充分,下面是对整个问题的更长描述。这个问题有比n^2更快的解决方案吗?下面的解决方案似乎是n^2,我不确定如何进一步优化它。 https://github.com/cem3394/hr-haskell/blob/master/beautifulsubarrays.hs

  • 问题内容: 我想计算所有奇数数组索引的总和,但是在寻找正确的方法时遇到了一些麻烦。 到目前为止,这是我的代码: 关于为何不起作用的任何想法,或者更简单的方法?为了澄清,我想在奇数数组索引位置添加所有数字,所以。 编辑: 忘记提及我只想添加1、3、5、7、9、11,而不是13。 问题答案: 刚刚编辑了代码: