每日一题670. 最大交换

Posted 王六六同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题670. 最大交换相关的知识,希望对你有一定的参考价值。

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

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

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

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

将原数组与排序数组进行对比,发现第3个位置是不对的,应该是8,但是原数组却是3,所以我们将原数组的3替换为8。

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

cl

以上是关于每日一题670. 最大交换的主要内容,如果未能解决你的问题,请参考以下文章

数组670. 最大交换

每日一题1800. 最大升序子数组和

每日一题1800. 最大升序子数组和

每日一题1403. 非递增顺序的最小子序列

670. 最大交换-贪心

每日一题11.6