📅  最后修改于: 2023-12-03 14:55:39.648000             🧑  作者: Mango
在编程中,经常需要寻找一个更大的数来进行下一步操作。但是,如何找到一个比当前数字更大的数字呢?
我们可以将数字从右向左分析,找到第一个左边小于右边的位置,然后在这个位置右侧找到一个比它大的最小数字,交换这两个数字,再将该位置右侧的数字按升序排序即可。
以数字 34521 为例:
以下是使用 Python 语言实现的代码片段,输入为一个数字列表,输出为下一个更大的数字列表。
def nextGreaterNum(nums: List[int]) -> List[int]:
n = len(nums)
# 从右向左遍历,找到第一个左边小于右边的位置
i = n - 2
while i >= 0 and nums[i] >= nums[i + 1]:
i -= 1
# 如果所有数字都是降序排列,则没有下一个更大的数字
if i < 0:
return nums
# 在位置 i 右侧寻找比它大的最小数字
j = n - 1
while j > i and nums[j] <= nums[i]:
j -= 1
# 交换两个数字
nums[i], nums[j] = nums[j], nums[i]
# 将位置 i 右侧的数字按升序排序
nums[i+1:] = reversed(nums[i+1:])
return nums
本文介绍了如何根据数字的优先级选择下一个更大的数字。我们可以先找到第一个左边小于右边的位置,再在它右侧找到比它大的最小数字,交换这两个数字并将右侧数字排序即可。