@ninijia 在 Leetcode每日一题练习 ------ 670. 最大交换 中发帖
从Leetcode 每日一题练习继续讨论:
670. 最大交换
670. Maximum Swap
题解
本题要想交换得到最大的数字,需要将前面的小数字与后面的大数字交换,要交换前面的小数字就需要后面有比它大的数字可供交换,交换时与后面的比它大的数字中最大的那个交换。如果最大的数字有多个,最与最后面的数字交换可以得到最大值(因为小的数字会被换到后面,换的位越低相对换到一个比较高的位数字整体就会更大)。则反向遍历数组,记录到当前数字的后面数字的最大值和对应位置,如果当前数字大于最大值则更新最大值和位置。再从头遍历数组,找到第一个后面最大值大于自己的数字并按照记录的位置执行交换即得最终结果。
代码
class Solution {
public:
int maximumSwap(int num) {
struct backMax {
i...