【每日一题】670. 最大交换

给定一个非负整数,你至多可以交换一次数字中的任意两位。
返回你能得到的最大值。

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

输入: 9973
输出: 9973
解释: 不需要交换。

排序 + 对比交换
要交换两个数,使其交换后得到最大值。
那么从高位开始,找到第一个没按照降序排列的数,就是我们需要替换的数了。所以,可以通过Arrays.sort()方法,将原有数组进行排序(默认是升序排序,当与原数组对比的时候,我们可以采用对排序后的数组执行倒序遍历即可)。

将原数组与排序数组进行对比,发现第3个位置是不对的,应该是8,但是原数组却是3,所以我们将原数组的3替换为8。
【每日一题】670. 最大交换_第1张图片

下一步,就是需要将原数组的8替换为3了。此时,为了保证交互后得到最大值,所以我们需要采用逆序遍历的方式,从数组的尾部开始找8,当找到后,将8替换为3即可。
【每日一题】670. 最大交换_第2张图片

cl

你可能感兴趣的:(leetcode刷题,#,每日打卡题,数据结构,leetcode,排序算法)