(必背)670. 最大交换(贪心法)
  FnrD2XWlpoQk 2023年11月02日 116 0
;]


### 解题思路

把尽可能高位的最小数字和尽可能低位的最大数字进行交换

1.从低位到高位进行遍历,保存遍历到当前位为止的最大数的位置

2.从高位到低位进行遍历,找到第一个小于后位的最大数进行交换

### 代码

class Solution {
public:
    vector<int> hm;
    int maximumSwap(int num) {
        string nums = to_string(num);
        hm = vector<int>(nums.size(),0);
        int maxid = nums.size() - 1;
        for(int i = nums.size() - 1; i >= 0; --i){
            if(nums[i] > nums[maxid]) maxid = i;
            hm[i] = maxid;
        }
        for(int i = 0; i < nums.size();++i){
            if(nums[i] != nums[hm[i]]){
                swap(nums[i],nums[hm[i]]);
                break;
            }
        }
        return stoi(nums);
    }
};

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  FnrD2XWlpoQk   2023年11月02日   117   0   0 ;]
FnrD2XWlpoQk