📜  计算来自两个给定阵列的偶数乘积对

📅  最后修改于: 2021-05-17 22:00:53             🧑  作者: Mango

给定两个数组,分别为大小为NM的arr []brr [] ,任务是找到对数(arr [i],brr [j]) ,以使对中的元素乘积为偶数数字。

例子:

天真的方法:解决此问题的最简单方法是遍历两个数组并从两个数组生成所有可能的对(arr [i],brr [j]) 。对于每对(arr [i],brr [j]) ,检查其乘积是否为偶数。如果发现为真,则增加计数。最后,打印获得的计数。

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

高效方法:可以基于两个乘积的以下属性来优化上述方法:

请按照以下步骤解决问题:

  • 初始化两个变量,例如cntOddArrcntOddBrr ,以存储分别存在于数组arr []brr []中的奇数计数。
  • 遍历数组arr [] ,对于每个数组元素,检查其是否为奇数。如果发现为真,则更新cntOddArr + = 1
  • 遍历数组brr [],并为每个数组元素索引,检查is是否为奇数。如果发现为真,则更新cntOddBrr + = 1
  • 最后,打印(((N * M)– cntOddArr * cntOddBrr)的值

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Function to count pairs (arr[i], brr[j])
// whose product is an even number
int cntPairsInTwoArray(int arr[], int brr[],
                       int N, int M)
{
    // Stores count of odd
    // numbers in arr[]
    int cntOddArr = 0;
 
    // Stores count of odd
    // numbers in brr[]
    int cntOddBrr = 0;
 
    // Traverse the array, arr[]
    for (int i = 0; i < N; i++) {
 
        // If arr[i] is
        // an odd number
        if (arr[i] & 1) {
 
            // Update cntOddArr
            cntOddArr += 1;
        }
    }
 
    // Traverse the array, brr[]
    for (int i = 0; i < M; i++) {
 
        // If brr[i] is
        // an odd number
        if (brr[i] & 1) {
 
            // Update cntOddArr
            cntOddBrr += 1;
        }
    }
 
    // Return pairs whose product
    // is an even number
    return (N * M) - (cntOddArr * cntOddBrr);
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 2, 3 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    int brr[] = { 1, 2 };
    int M = sizeof(brr) / sizeof(brr[0]);
 
    cout << cntPairsInTwoArray(arr, brr, N, M);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
 
class GFG{
 
// Function to count pairs (arr[i], brr[j])
// whose product is an even number
static int cntPairsInTwoArray(int arr[], int brr[],
                       int N, int M)
{
   
    // Stores count of odd
    // numbers in arr[]
    int cntOddArr = 0;
 
    // Stores count of odd
    // numbers in brr[]
    int cntOddBrr = 0;
 
    // Traverse the array, arr[]
    for (int i = 0; i < N; i++) {
 
        // If arr[i] is
        // an odd number
        if (arr[i] % 2 == 1) {
 
            // Update cntOddArr
            cntOddArr += 1;
        }
    }
 
    // Traverse the array, brr[]
    for (int i = 0; i < M; i++) {
 
        // If brr[i] is
        // an odd number
        if (brr[i] % 2 == 1) {
 
            // Update cntOddArr
            cntOddBrr += 1;
        }
    }
 
    // Return pairs whose product
    // is an even number
    return (N * M) - (cntOddArr * cntOddBrr);
}
 
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 1, 2, 3 };
    int N = arr.length;
 
    int brr[] = { 1, 2 };
    int M = brr.length;
 
    System.out.print(cntPairsInTwoArray(arr, brr, N, M));
 
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program to implement
# the above approach
 
# Function to count pairs (arr[i], brr[j])
# whose product is an even number
def cntPairsInTwoArray(arr, brr, N, M):
     
    # Stores count of odd
    # numbers in arr[]
    cntOddArr = 0
 
    # Stores count of odd
    # numbers in brr[]
    cntOddBrr = 0
 
    # Traverse the array, arr[]
    for i in range(N):
 
        # If arr[i] is
        # an odd number
        if (arr[i] & 1):
 
            # Update cntOddArr
            cntOddArr += 1
 
    # Traverse the array, brr[]
    for i in range(M):
 
        # If brr[i] is
        # an odd number
        if (brr[i] & 1):
 
            # Update cntOddArr
            cntOddBrr += 1
 
    # Return pairs whose product
    # is an even number
    return (N * M) - (cntOddArr * cntOddBrr)
 
# Driver Code
if __name__ == '__main__':
     
    arr = [ 1, 2, 3 ]
    N = len(arr)
 
    brr = [ 1, 2 ]
    M = len(brr)
 
    print(cntPairsInTwoArray(arr, brr, N, M))
 
# This code is contributed by mohit kumar 29


C#
// C# program to implement
// the above approach 
using System;
    
class GFG{
    
// Function to count pairs (arr[i], brr[j])
// whose product is an even number
static int cntPairsInTwoArray(int[] arr, int[] brr,
                              int N, int M)
{
     
    // Stores count of odd
    // numbers in arr[]
    int cntOddArr = 0;
  
    // Stores count of odd
    // numbers in brr[]
    int cntOddBrr = 0;
  
    // Traverse the array, arr[]
    for(int i = 0; i < N; i++)
    {
         
        // If arr[i] is
        // an odd number
        if (arr[i] % 2 == 1)
        {
             
            // Update cntOddArr
            cntOddArr += 1;
        }
    }
  
    // Traverse the array, brr[]
    for(int i = 0; i < M; i++)
    {
         
        // If brr[i] is
        // an odd number
        if (brr[i] % 2 == 1)
        {
             
            // Update cntOddArr
            cntOddBrr += 1;
        }
    }
  
    // Return pairs whose product
    // is an even number
    return (N * M) - (cntOddArr * cntOddBrr);
}
    
// Driver Code
public static void Main()
{
    int[] arr = { 1, 2, 3 };
    int N = arr.Length;
  
    int[] brr = { 1, 2 };
    int M = brr.Length;
  
    Console.Write(cntPairsInTwoArray(
        arr, brr, N, M));
}
}
 
// This code is contributed by code_hunt


Javascript


输出:
4

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