通过一次交换得到字典序小于原数组的最大排列 —— 题解与深入分析
题目描述
给定一个整数数组 arr,数组中可能包含重复元素。我们只能对数组中的两个元素执行 一次交换(即交换两个不同位置上的数字),目标是:
- 得到一个字典序严格小于原数组的排列;
- 并且在所有满足条件的排列中,字典序最大。
如果不存在这样的交换,返回原数组。
题目理解
本题要求我们通过 一次交换,让排列的字典序变小(严格小于当前排列),且交换后的排列在所有满足字典序更小的排列中是最大排列。
这意味着:
- 我们不允许多次交换,也不能对剩余部分重新排序(例如反转、排序);
- 交换必须使得整体排列字典序降低;
- 在所有能降低字典序的交换中,选择产生最大字典序的那个结果。
题目示例
示例 1:
输入: arr = [3,2,1]
输出: [3,1,2]
解释: 交换了 2 和 1 后得到的排列是字典序小于原数组的最大排列。
示例 2:
输入: arr = [1,1,5]
输出: [1,1,5]
解释: 无法通过一次交换得到字典序更小的排列,返回原数组。

最低0.47元/天 解锁文章
341

被折叠的 条评论
为什么被折叠?



