📜  最长乘积奇数的子阵列

📅  最后修改于: 2021-04-23 06:28:54             🧑  作者: Mango

给定一个由N个元素组成的数组arr [] ,任务是找到具有积的最长子数组的长度。

例子:

方法:
要解决此问题,需要进行以下观察:

从上面的观察,我们可以得出结论,数组中连续奇数元素的最长子数组是必需的答案。
请按照以下步骤解决问题:

  • 遍历数组并检查当前元素是偶数还是奇数。
  • 如果当前元素为奇数,则将count设置为1并保持递增计数,直到在数组中遇到偶数元素为止。
  • 遇到偶数元素后,将count与ans进行比较,并更新ans并存储两者中的最大值。
  • 对其余阵列重复上述步骤。
  • 最后,打印存储在ans中的值。

下面是上述方法的实现:

C++
// C++ Program to find the longest
// subarray with odd product
#include 
using namespace std;
  
// Function to return length of
// longest subarray with odd product
int Maxlen(int arr[], int n)
{
    int ans = 0;
    int count = 0;
    for (int i = 0; i < n; i++) {
  
        // If even element
        // is encountered
        if (arr[i] % 2 == 0)
            count = 0;
        else
            count++;
  
        // Update maximum
        ans = max(ans, count);
    }
    return ans;
}
  
// Driver Code
int main()
{
  
    // int arr[] = { 6, 3, 5, 1 };
    int arr[] = { 1, 7, 2 };
    int n = sizeof(arr) / sizeof(int);
  
    cout << Maxlen(arr, n) << endl;
    return 0;
}


Java
// Java program to find the longest
// subarray with odd product
import java.util.*;
  
class GFG{
      
// Function to return length of
// longest subarray with odd product
static int Maxlen(int arr[], int n)
{
    int ans = 0;
    int count = 0;
    for(int i = 0; i < n; i++)
    {
          
        // If even element
        // is encountered
        if (arr[i] % 2 == 0)
            count = 0;
        else
            count++;
  
        // Update maximum
        ans = Math.max(ans, count);
    }
    return ans;
}
  
// Driver Code
public static void main(String s[])
{
    int arr[] = { 1, 7, 2 };
    int n = arr.length;
      
    System.out.println(Maxlen(arr, n));
} 
}
  
// This code is contributed by rutvik_56


Python3
# Python3 program to find the longest 
# subarray with odd product
  
# Function to return length of 
# longest subarray with odd product 
def Maxlen(a, n):
      
    ans = 0
    count = 0
      
    for i in range(n): 
  
        # If even element 
        # is encountered 
        if a[i] % 2 == 0: 
            count = 0
        else: 
            count += 1
              
        # Update maximum 
        ans = max(ans, count)
          
    return ans
  
# Driver code
arr = [ 1, 7, 2 ] 
n = len(arr) 
  
print(Maxlen(arr, n))
  
# This code is contributed by amreshkumar3


C#
// C# program to find the longest 
// subarray with odd product 
using System; 
  
class GFG{ 
  
// Function to return length of 
// longest subarray with odd product 
static int Maxlen(int []arr, int n) 
{ 
    int ans = 0; 
    int count = 0; 
      
    for(int i = 0; i < n; i++) 
    { 
          
        // If even element 
        // is encountered 
        if (arr[i] % 2 == 0) 
            count = 0; 
        else
            count++; 
      
        // Update maximum 
        ans = Math.Max(ans, count); 
    } 
    return ans; 
} 
  
// Driver Code 
public static void Main() 
{ 
    int []arr = { 1, 7, 2 }; 
    int n = arr.Length; 
      
    Console.WriteLine(Maxlen(arr, n)); 
} 
} 
  
// This code is contributed by amreshkumar3


输出:
2

时间复杂度: O(N)
辅助空间: O(1)