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 0s and/or 1s:
- 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] = 1We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).
Write a function:
class Solution { public int solution(int[] A); }
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] = 1the function should return 5, as explained above.
Write an efficient algorithm for the following assumptions:
- 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.
[0, 1, 0, 1, 1]
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
print(A)
var arr: []
for (index, _) in A.enumerated() {
}
return 0
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
print(A)
var arr: [Int:Int] = []
for (index, _) in A.enumerated() {
}
return 0
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
print(A)
var arr: [Int:Int] = []
for (index, _) in A.enumerated() {
arr[index] =
}
return 0
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
print(A)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
arr[index] = []
}
return 0
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
arr.append((A[index], 0))
for i in index..<A.count {
if A[i] == 1 {
if arr.last?.1 == 0 {
arr[index] = (0, A[i])
} else {
arr.append((0, A[i]))
}
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
arr.append((A[index], 0))
for i in index..<A.count {
if A[i] == 1 {
if arr.last?.1 == 0 {
arr[index] = (0, A[i])
} else {
arr.append((0, A[i]))
}
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
for i in index..<A.count {
if A[i] == 1 {
arr.append((0, 1))
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
for i in index..<A.count {
if A[i] == 1 {
arr.append((0, 1))
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
for i in index..<A.count {
if A[i] == 1 {
arr.append((0, 1))
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
var arr: [(Int,Int)] = []
for (index, _) in A.enumerated() {
if A[index] == 0 {
for i in index..<A.count {
if A[i] == 1 {
arr.append((0, 1))
}
}
}
}
if arr.count > 1000000000 {
return -1
}
return arr.count
}
The following issues have been detected: timeout errors.
random, length = ~10,000
running time: 0.472 sec., time limit: 0.112 sec.
random, length = ~100,000
running time: 1.168 sec., time limit: 0.128 sec.
0..01..1, length = ~100,000
running time: 0.852 sec., time limit: 0.128 sec.
0101..01, length = ~100,000
running time: 0.872 sec., time limit: 0.128 sec.
large test with all 1s/0s, length = ~100,000
running time: 3.288 sec., time limit: 0.128 sec.