Count passing car pairs

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 number of 1s after 0. Finally we return total count.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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 
?>

chevron_right



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 right. Whenever we see a 0, we increment the result by count of 1s.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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 

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right



Output:

5

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


Reference :

http://stackoverflow.com/questions/23774985/codility-passing-car

This article is contributed by Rakesh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.