【华为机试】2023年真题B卷(python)-阿里巴巴找黄金宝箱(IV)

一、题目

题目描述:
贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的子,每个箱子上面有一人数字,箱了排列成一个环,编号最大的箱子的下一个是编号为0的箱子。请输出每个箱了贴的数字之后的第一个比它大的数,如果不存在则输出-1。

二、输入输出

输入描述:
输入一个数字字串,数字之间使用逗号分隔,例如: 1,2,3,1 1≤ 字串中数字个数 ≤10000: -100000≤每个数字值≤100000
输出描述:
下一个大的数列表,以逗号分隔,例如: 2,3,6,-1,6 

三、示例

示例1: 
输入:
2,5,2 
输出:
5,-1,5 
说明:
第一个2的下一个更大的数是5数字5找不到下一个更大的数:第二个2的下一个最大的数需要循环搜索,结果也是 5

示例2: 
输入:
3,4,5,6,3 
输出:
4,5,6-1,4

四、要求

时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld

五、解题思路

  1. 首先,我们需要将输入的数字字符串按逗号分割成数字列表。
  2. 然后,我们可以使用一个循环来遍历每个数字,并找到下一个比它大的数。
  3. 在循环中,我们可以使用一个内部循环来搜索下一个比当前数字大的数。如果找到了,则将该数添加到结果列表中,并跳出内部循环;如果没有找到,则将-1添加到结果列表中。
  4. 最后,将结果列表转换为字符串,并用逗号分隔每个数字。

六、参考代码 

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-阿里巴巴找黄金宝箱(IV).py
@Time    :   2023/12/15 10:54:07
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

def find_next_greater_numbers(numbers):
    numbers = [int(num) for num in numbers.split(",")]  # 按逗号分割数字字符串为数字列表
    n = len(numbers)
    result = []

    for i in range(n):
        found = False
        for j in range(i+1, n+i+1):
            if numbers[j % n] > numbers[i]:  # 搜索下一个比当前数字大的数
                result.append(str(numbers[j % n]))
                found = True
                break
        if not found:
            result.append("-1")

    return ",".join(result)  # 将结果列表转换为字符串,并用逗号分隔每个数字

# 测试样例
numbers = input()
result = find_next_greater_numbers(numbers)
print(result)

猜你喜欢

转载自blog.csdn.net/u014481728/article/details/135011997