【算法题】计算路上往东西两个方向互相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   新西兰程序员  阅读(22)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示