【算法题】计算路上往东西两个方向互相passing的车辆个数
这个是Codility上利用prefix sum进行计算的一道等级为easy的题目,具体题目如下
说是有一个整形数组int[] A,数组包含N个元素,这个数组元素的值,只有2种,一是0,二是1
A[i] = 0 => 代表第i+1辆车往西开
A[i] = 1 => 代表第i+1辆车往东开
我们现在假设往东开的车在数组A中的位置为P, 往西开的车在数组A中的位置为Q, 如果满足 0 <= P <= Q < N, 那么我们认为P,Q这一对车(两辆车)就是passing cars 相遇车
现在我们要计算数组A中有多少对相遇车passing cars
比如
A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1
显然我们有5对
P = 0, Q = 1 => (0,1)
P = 0, Q = 3 => (0,3)
P =0, Q =4 => (0,4)
P = 2, Q = 3 => (2,3)
P= 2, Q = 4 => (2,4)
我们现在的题目就是, 要根据提供的数组A, 返回passing cars的组数,比如上面这道题,就是返回5
答题:
这道题目,我在网上看到一个非常厉害的做法,但是还没有看明白这样做为什么行,代码如下
Class Solution { public int GetPassingCars(int[] A) { var zeros = 0; var passings = 0; for(int i = 0; i < A.Length; i ++)
{
if(A[i] == 0)
zeros += 1;
else
passings += zeros;
} return passings; } }