1053. 交换一次的先前排列

通过一次交换得到字典序小于原数组的最大排列 —— 题解与深入分析

题目描述

给定一个整数数组 arr,数组中可能包含重复元素。我们只能对数组中的两个元素执行 一次交换(即交换两个不同位置上的数字),目标是:

  • 得到一个字典序严格小于原数组的排列;
  • 并且在所有满足条件的排列中,字典序最大。

如果不存在这样的交换,返回原数组。


题目理解

本题要求我们通过 一次交换,让排列的字典序变小(严格小于当前排列),且交换后的排列在所有满足字典序更小的排列中是最大排列。

这意味着:

  • 我们不允许多次交换,也不能对剩余部分重新排序(例如反转、排序);
  • 交换必须使得整体排列字典序降低;
  • 在所有能降低字典序的交换中,选择产生最大字典序的那个结果。

题目示例

示例 1:

输入: arr = [3,2,1]
输出: [3,1,2]
解释: 交换了 2 和 1 后得到的排列是字典序小于原数组的最大排列。

示例 2:

输入: arr = [1,1,5]
输出: [1,1,5]
解释: 无法通过一次交换得到字典序更小的排列,返回原数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值