最小步骤数(华为od考试)

本文探讨了华为在线开发者(OD)考试中的一道算法题,重点在于找到完成任务的最小步骤数。通过使用Python编程语言,我们深入分析了解题思路,包括可能的解决方案和优化技巧,旨在帮助考生更好地理解和应对这类问题。
摘要由CSDN通过智能技术生成
# 最小步骤数
# 题目描述
# 一个正整数数组,设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数
# 要求:
# 第一步,必须从第一元素起,且1 <= 第一步步长 < len / 2 (len为数组长度)
# 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少,如果目标不可达返回-1,只输出最小的步骤数量
# 只能向数组的尾部走不能向回走
# 输入描述
# 一个正整数数组,元素用空格分割
# 数组长度 < 100
#
# 输出描述
# 正整数,最小步数
# 不存在输出-1
#
# 示例一
# 输入
# 7 5 9 4 2 6 8 3 5 4 3 9
# 输出
# 2
# 说明
# 第一个可选步长选择2
# 从第一个成员7开始走两步到9
# 第二步从9经过9个成员到最后
#
# 示例二
# 输入
# 1 2 3 7 1 5 9 3 2 1
# 输出
# -1
num_list = [int(x) for x in input().strip().split()]

def parse_number(number_list):
    temp, step = set(), 1
    for i in range(1, len(number_list) // 2):
        temp.add(compare_number(i, i, step))
    if len(temp) == 1:
        print(temp.pop())
    else:
        temp = sorted(x for x in temp if x > 0)
        print(temp[0])

def compare_number(curPosition, lastPosition, step):
    num_step = num_list[curPosition]
    if lastPosition == len(num_list) - 1:
        return step
    elif lastPosition < len(num_list) - 1:
        step += 1
        return compare_number(lastPosition, lastPosition + num_step, step)
    else:
        return -1

parse_number(num_list)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值