【算法题】计算路上往东西两个方向互相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; } }

 

posted on 2023-02-19 16:02  新西兰程序员  阅读(20)  评论(0编辑  收藏  举报