题目描述:
贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从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添加到结果列表中。
- 最后,将结果列表转换为字符串,并用逗号分隔每个数字。
# -*- 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)