Skip to content

Latest commit

 

History

History
64 lines (46 loc) · 1.8 KB

0670-maximum-swap.adoc

File metadata and controls

64 lines (46 loc) · 1.8 KB

670. 最大交换

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

示例 1 :

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

示例 2 :

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

注意:

  1. 给定数字的范围是 [0, 108]

思路分析

如何进行“最大交换”?其实很简单:从后面的数字中,找出一个最大数与最高位进行交换。如果后面的最大数小于等于最高位的数字,则把最高位“向后”移一位,再从剩下的数字中寻找最大的数字。

有一点需要特别注意,如果后面的数字的最大数存在多个,则最高位需要跟最低位的数字进行交换。(保持高位的最大数字不变,可以保证数字更大。)

网友对贪心算法的一句话总结:每一位数字应该不小于所有排它后面的数字,否则找最大的且排最后面的数字与之交换。

一刷
link:{sourcedir}/_0670_MaximumSwap.java[role=include]