Codility每周一课:L4 Counting Elements(P4.2)

4734220-cc5fff3d0deb569e.png
0.png
P4.2 FrogRiverOne

Find the earliest time when a frog can jump to the other side of a river.

  • P4.2 青蛙过河
    青蛙跳到河对岸的最早时刻

小青蛙想到河的另一边去。青蛙最初位于河流的一个河岸上(位置0),想要到达对岸(位置X+1)。树叶从树上掉到河面上。数组A由N个表示落叶的整数组成。A[k]表示一片叶子在时刻K下落的位置。要找到青蛙最早跳到河对岸的时间。

青蛙只有在1到X之间的每一个位置都有叶子出现时才能过河(也就是说,我们希望找到最早的那一时刻,此时1到X之间的所有位置都被叶子覆盖)。假设河流中的水流速度很小,也就是说,树叶一旦落入河流中不会改变它们的位置。

例如,给定的整数X=5和数组A:A[0]=1,A[1]=3,A[2]=1,A[3]=4,A[4]=2,A[5]=3,A[6]=5,A[7]=4。在时刻6的叶子落在第5个位置后,因此时刻6是最早的可以过河的时刻。
编写函数:

def solution(X, A)

给定一个由N个整数组成的非空数组A和整数X,则返回青蛙跳到河的另一边的最早时间。如果青蛙永远不能跳到河的另一边,函数应该返回−1。
例如,针对上面给出的数组A和X值,函数应该返回6。
假定:

  1. N和X是区间[1,100000]内的整数;
  2. 数组A的每个元素都是一个区间[1,x]内的整数;
  • 解题思路
    利用字典。
  • Python3代码
# -*- coding:utf-8 -*-
# &Author  AnFany
# Lesson 4:Counting Elements
# P 4.2 FrogRiverOne

def solution(X, A):
    """
    返回最小的可以覆盖1到X序列的索引值
    :param X: 目标
    :param A: 数组
    :return: 最小的索引值
    """
    x_dict = {i: 0 for i in range(1, X+1)}
    for index, value in enumerate(A):
        if value in x_dict:
            del x_dict[value]
        if len(x_dict) == 0:
            return index
    return -1
  • 结果
4734220-9a61be8243ecf489
image

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

4734220-3a38d3c2af6073bb
image
4734220-28f0bd9ed8f73937
image

猜你喜欢

转载自blog.csdn.net/weixin_34208283/article/details/86815315