Open In App

Count passing car pairs

Last Updated : 13 Sep, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

A non-empty binary array A consisting of size N is given where, 

0 represents a car traveling east,
1 represents a car traveling west. 

The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 <= P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.

Examples: 

Input  : arr[] = {0, 1, 0, 1, 1}
Output : 5
The 5 pairs are (A[0], A[1]), (A[0], A[3]), (A[0], A[4]),   
(A[2], A[3]) and (A[2], A[4]). Note that in all pairs
first element is 0, second element is 1 and index of
first element is smaller than index of second element.

Input  : arr[] = {1, 0, 0, 0, 1}
Output : 3

Input : arr[] = {0, 0, 1, 0, 0}
Output : 2

A simple solution is to use two nested loops. The outer loop searches for a 0, the inner loop counts a number of 1s after 0. Finally, we return the total count. 

Implementation:

C++




// Simple C++ program to count passing cars
#include<bits/stdc++.h>
using namespace std;
  
// Returns count of passing cars
int getPassingCars(int A[], int n)
{
    int result = 0;
    for (int i=0; i<n-1; i++)
    {
       if (A[i] == 0)
       {
           for (int j=i+1; j<n; j++)  
              if (A[j])
                 result++; 
       
    }
    return result;
}
  
// Driver program
int main()
{
    int A[] = {0, 1, 0, 1, 1};
    int n = sizeof(A)/sizeof(A[0]);
    cout << getPassingCars(A, n);
    return 0;
}


Java




// Simple Java program to count passing cars
class GFG
{
  
// Returns count of passing cars
static int getPassingCars(int[] A, int n)
{
    int result = 0;
    for (int i = 0; i < n - 1; i++)
    {
    if (A[i] == 0)
    {
        for (int j = i + 1; j < n; j++) 
            if (A[j] == 1)
                result++; 
    
    }
    return result;
}
  
// Driver Code
public static void main(String[] args)
{
    int[] A = {0, 1, 0, 1, 1};
    int n = A.length;
    System.out.println(getPassingCars(A, n));
}
}
  
// This code is contributed
// by Code_Mech


Python3




# Simple Python 3 program to 
# count passing cars
  
# Returns count of passing cars
def getPassingCars(A, n):
    result = 0
    for i in range(0, n - 1, 1):
        if (A[i] == 0):
            for j in range(i + 1, n, 1):
                if (A[j]):
                    result += 1
          
    return result
  
# Driver Code
if __name__ == '__main__':
    A = [0, 1, 0, 1, 1]
    n = len(A)
    print(getPassingCars(A, n))
      
# This code is contributed by
# Sanjit_Prasad


C#




// Simple C# program to count passing cars
using System;
  
class GFG
{
  
// Returns count of passing cars
static int getPassingCars(int[] A, int n)
{
    int result = 0;
    for (int i = 0; i < n - 1; i++)
    {
    if (A[i] == 0)
    {
        for (int j = i + 1; j < n; j++) 
            if (A[j] == 1)
                result++; 
    
    }
    return result;
}
  
// Driver Code
public static void Main()
{
    int[] A = {0, 1, 0, 1, 1};
    int n = A.Length;
    Console.WriteLine(getPassingCars(A, n));
}
}
  
// This code is contributed
// by Akanksha Rai


PHP




<?php
// Simple PHP program to count passing cars
  
// Returns count of passing cars
function getPassingCars($A, $n)
{
    $result = 0;
    for ($i = 0; $i < $n - 1; $i++)
    {
        if ($A[$i] == 0)
        {
            for ($j = $i + 1; $j < $n; $j++) 
                if ($A[$j])
                    $result++; 
        
    }
    return $result;
}
  
    // Driver Code
    $A = array(0, 1, 0, 1, 1);
    $n = sizeof($A);
    echo getPassingCars($A, $n);
  
// This code is contributed by m_kit 
?>


Javascript




<script>
  
    // Simple Javascript program 
    // to count passing cars
      
    // Returns count of passing cars
    function getPassingCars(A, n)
    {
        let result = 0;
        for (let i = 0; i < n - 1; i++)
        {
          if (A[i] == 0)
          {
              for (let j = i + 1; j < n; j++) 
                  if (A[j] == 1)
                      result++; 
          
        }
        return result;
    }
      
    let A = [0, 1, 0, 1, 1];
    let n = A.length;
    document.write(getPassingCars(A, n));
      
</script>


Output

5

Time Complexity : O(n2
Auxiliary Space : O(1)

An efficient solution to traverse array from right, keep track of counts of 1s from the right. Whenever we see a 0, we increment the result by a count of 1s. 

Implementation:

C++




// Efficient C++ program to count passing cars
#include<bits/stdc++.h>
using namespace std;
  
// Returns count of passing cars
int getPassingCars(int A[], int n)
{
    // Initialize count of 1s from right
    // and result
    int countOne = 0, result = 0;
    while (n >= 1)
    {
        if (A[n-1] == 1)
            countOne++;
        else
            result += countOne;
        n--;
    }
  
    return result;
}
  
// Driver program
int main()
{
    int A[] = {0, 1, 0, 1, 1};
    int n = sizeof(A)/sizeof(A[0]);
    cout << getPassingCars(A, n);
    return 0;
}


Java




// Efficient Java program to count passing cars
class GFG
{
      
// Returns count of passing cars
static int getPassingCars(int A[], int n)
{
    // Initialize count of 1s from right
    // and result
    int countOne = 0, result = 0;
    while (n >= 1)
    {
        if (A[n-1] == 1)
            countOne++;
        else
            result += countOne;
        n--;
    }
  
    return result;
}
  
// Driver code
public static void main(String[] args)
{
    int A[] = {0, 1, 0, 1, 1};
    int n = A.length;
    System.out.println(getPassingCars(A, n));
}
}
  
// This code is contributed by Mukul Singh.


Python3




# Efficient Python3 program to 
# count passing cars 
  
# Returns count of passing cars 
def getPassingCars(A, n):
  
    # Initialize count of 1s 
    # from right and result 
    countOne = 0; result = 0
    while n >= 1:
        if A[n - 1] == 1:
            countOne += 1
        else:
            result += countOne
        n -= 1
    return result
  
# Driver code
A = [0, 1, 0, 1, 1]
n = len(A)
print(getPassingCars(A, n))
  
# This code is contributed
# by Shrikant13 


C#




// Efficient C# program to
// count passing cars
using System;
  
class GFG
{
      
// Returns count of passing cars
static int getPassingCars(int []A, int n)
{
    // Initialize count of 1s from right
    // and result
    int countOne = 0, result = 0;
    while (n >= 1)
    {
        if (A[n - 1] == 1)
            countOne++;
        else
            result += countOne;
        n--;
    }
  
    return result;
}
  
// Driver code
public static void Main()
{
    int []A = {0, 1, 0, 1, 1};
    int n = A.Length;
    Console.Write(getPassingCars(A, n));
}
}
  
// This code is contributed
// by Akanksha Rai


PHP




<?php
// Efficient PHP program to count passing cars
  
// Returns count of passing cars
function getPassingCars($A, $n)
{
    // Initialize count of 1s from right
    // and result
    $countOne = 0; $result = 0;
    while ($n >= 1)
    {
        if ($A[$n-1] == 1)
            $countOne++;
        else
            $result += $countOne;
        $n--;
    }
  
    return $result;
}
  
// Driver Code
$A = array(0, 1, 0, 1, 1);
$n = sizeof($A);
echo getPassingCars($A, $n);
  
// This code is contributed 
// by Akanksha Rai
?>


Javascript




<script>
    // Efficient Javascript program to count passing cars
      
    // Returns count of passing cars
    function getPassingCars(A, n)
    {
        // Initialize count of 1s from right
        // and result
        let countOne = 0, result = 0;
        while (n >= 1)
        {
            if (A[n - 1] == 1)
                countOne++;
            else
                result += countOne;
            n--;
        }
  
        return result;
    }
      
    let A = [0, 1, 0, 1, 1];
    let n = A.length;
    document.write(getPassingCars(A, n));
      
</script>


Output

5

Time Complexity: O(n) 
Auxiliary Space: O(1)

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads