如果您曾经使用过C++,那么您必须知道子数组是什么以及它们有多大用处。众所周知,在C++中,我们可以轻松解决多个数学问题。因此,在本文中,我们将解释有关如何借助C++中的这些子数组找到M个奇数的完整信息。
在这个问题中,我们需要找到许多由给定数组和整数m组成的子数组,其中每个子数组都包含恰好m个奇数。所以这是这种方法的简单示例-
Input : array = { 6,3,5,8,9 }, m = 2 Output : 5 Explanation : Subarrays with exactly 2 odd numbers are { 3,5 }, { 6,3,5 }, { 3,5,8 }, { 5,8,9 }, { 6,3,5,8 }, { 3,5,8,9 } Input : array = { 1,6,3,2,5,4 }, m = 2 Output : 6 Explanation : Subarrays with exactly 2 odd numbers are { 1,6,3 }, { 3,2,5 }, { 1,6,3,2 }, { 6,3,2,5 }, { 3,2,5,4 }, { 6,3,2,5,4 }在这种方法中,所有可能的子数组都是从给定的数组中生成的,并且每个子数组都被精确地检查m个奇数。这是一种简单的生成和查找方法,该方法的时间复杂度为O(n2)。
在这段代码中,我们使用嵌套循环来查找具有m个奇数的子数组,外循环用于递增“i”,它将用于处理数组中的每个元素。
内部循环用于查找子数组并处理元素,直到奇数计数器达到m,为找到的每个子数组增加结果计数器计数,最后打印存储在计数变量中的结果。
另一种方法是创建一个数组,用于存储具有“i”个奇数的前缀数量,处理每个元素,并为找到的每个奇数增加奇数的数量。
当奇数的计数超过或等于m时,在前缀数组中的(odd-m)位置添加数字。
当odd大于或等于m时,我们计算形成的子数组的数量,直到将索引和“odd-m”数添加到count变量中。处理完每个元素后,结果将存储在count变量中。
用起始值初始化数组和变量-
int array[ 6 ] = { 1, 6, 3, 2, 5, 4 }; int n = 6, m = 2, count = 0, odd = 0, i; int prefix_array[n + 1] = { 0 };在这里,我们用数组的大小初始化变量n,用要查找的奇数个数初始化变量m,用0计数以保持可能子数组的计数,用0计算奇数,用0初始化大小为n+1的prefix_array。
在这个循环中,我们在prefix_array[]中的奇数索引处实现值,如果找到奇数,则增加奇数变量。我们发现当奇数变量等于或大于m时,可以形成子数组的数量直到索引。
最后,我们打印多个子数组,其中m个奇数存储在count变量中并获得输出。
在本文中,我们了解了从两种方法中找到具有m个奇数的子数组数量的方法-
生成每个子数组并检查其中的m个奇数,并为找到的每个子数组增加计数。这段代码的时间复杂度是O(n2)。
高效的方法,它遍历数组的每个元素并创建一个前缀数组,并在前缀数组的帮助下找到结果。这段代码的时间复杂度是O(n)。
希望您发现这篇文章有助于理解问题和解决方案。