Count the number of passing cars on the road
ℹ️ © Codility, 2009-2018
Problem
A non-empty array A consisting of n integers is given. The consecutive elements of array A represent consecutive cars on a road.
Array A contains only 0’s and/or 1’s:
• 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.
For example, consider array A such that: A[0] = 0, A[1] = 1, A[2] = 0, A[3] = 1, A[4] = 1. We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).
Write a function that, given a non-empty array A of n integers, returns the number of pairs of passing cars.
The function should return -1 if the number of pairs of passing cars exceeds 1,000,000,000.
For example, given: A[0] = 0, A[1] = 1, A[2] = 0, A[3] = 1, A[4] = 1, the function should return 5, as explained above.
Assume that:
• n is an integer within the range [1 … 100,000];
• each element of array A is an integer that can have one of the following values: 0, 1.
Complexity:
• expected worst-case time complexity is O(n);
• expected worst-case space complexity is O(1) (not counting the storage required for input arguments).
Solution
C#
class Solution { public int solution(int[] A) { int r = 0; int k = 0; foreach (int a in A) { if (a == 0) { k++; } else { r += k; if (r > 1000000000) { return -1; } } } return r; } }
Java
class Solution { public int solution(int[] A) { int r = 0; int k = 0; for (int a : A) { if (a == 0) { k++; } else { r += k; if (r > 1000000000) { return -1; } } } return r; } }
JavaScript
function solution(A) { let r = 0; let k = 0; for (let i in A) { let a = A[i]; if (a == 0) { k++; } else { r += k; if (r > 1000000000) { return -1; } } } return r; }
PHP
function solution($A) { $r = 0; $k = 0; foreach ($A as $a) { if ($a == 0) { $k++; } else { $r += $k; if ($r > 1000000000) { return -1; } } } return $r; }