【算法题】计算路上往东西两个方向互相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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律