首页 > 代码库 > Codility-PassingCars
Codility-PassingCars
Task description
A non-empty zero-indexed 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:
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:
that, given a non-empty zero-indexed 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. Assume that:
Complexity:
Elements of input arrays can be modified. |
思路: 直觉 冒泡数组排列 0 1 组合 -> O(n2) X
O(n) 要求只能遍历一遍数组。而且只允许(0,1),不允许(1,0)。。。。。囧么办呢?
(0,1)组合。☆1可以和前面所有的0组合(由前遍历)或者 0可以和后面所有的1组合(由后遍历)。
class Solution { public int solution(int[] A) { // write your code in Java SE int N = A.length; int sum_1 = 0; int result = 0; for(int i=N-1;i>=0; i--){ if(A[i]==1) sum_1 = sum_1+1 ; else result = result + sum_1 ; if(result>1000000000) return -1; } return result; } }
Codility-PassingCars