Codility每周一课:L5 Prefix Sums(P5.1)

4734220-29a9fb858ca70604.png
0.png

P5.1 PassingCars
Count the number of passing cars on the road.

  • P5.1 过路车
    计算路上的过路车数量

一个由N个整数组成的非空数组A。数组A的元素表示道路上行驶的汽车。数组A仅包含0和1:

  1. 0表示向东行驶的汽车;
  2. 1表示向西行驶的汽车;

目标是计算过路车的数量。当P向东行驶,Q向西行驶时,有一对车(P,Q),其中0≤P<Q<N表示一对过路车。

例如,考虑数组A,A[0]=0,A[1]=1,A[2]=0,A[3]=1,A[4]=1。我们有五对过路车:(0,1),(0,3),(0,4),(2,3),(2,4)。

编写函数:

def solution(A)

给定一个由N个整数组成的非空数组A,则返回路过车对的数目。如果过路车对数超过1000,000,000,该函数应返回−1。

例如,针对上面的例子函数应该返回5。

假定:

  1. N是区间[1..100000]内的整数;
  2. 数组A的每个元素是0,1中的一个;
  • 解题思路

和数组后边0元素代表的汽车能组成过路车对的汽车,同样也能和前边的0元素代表的汽车组成过路车队。

  • Python3代码
# -*- coding:utf-8 -*-
# &Author  AnFany
# Lesson 5:Prefix Sums
# P 5.1 PassingCars


def solution(A):
    """
    根据数组A中车的行驶方向,确定出现多少对过路车
    :param A: 数组
    :return: 过路车的对数
    """
    reverse_list = A[::-1]
    pairs = 0
    forward_passing = 0
    zero_sign = 0
    for index, value in enumerate(reverse_list):
        if value == 0:
            forward_passing += index - zero_sign
            pairs += forward_passing
            zero_sign = index + 1
            if pairs > 1000000000:
                return -1
    return pairs
  • 结果
4734220-227e8038649987d7
image

点击获得更多编程练习题。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。

4734220-3a38d3c2af6073bb
image
4734220-28f0bd9ed8f73937
image

猜你喜欢

转载自blog.csdn.net/weixin_34268610/article/details/86815313
今日推荐