其他分享
首页 > 其他分享> > leetcode 670.最大交换

leetcode 670.最大交换

作者:互联网

670. 最大交换
难度
中等

342

 

 

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

示例 1 :

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

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

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

 

思路:

尽量将大的数字交换到高位置上去并且在存在相同的大的数字在不同位置上,交换低位置上的大数

 

贪心+预处理的魅力

我们首先遍历该数的每一位 注意从后往前遍历 建立index数组保存该位右侧的最大数字所在的位置

然后从前往后遍历遇到自身后面最大数字所在位置的字符与自己不同时,交换并退出

int 转string  to_string(int i)

string转int  atoi(s.c_str());

class Solution {
public:
    int maximumSwap(int num) {
       //一个非负整数 交换数字中的任意两位得到能得到的最大值
       //常规思路:将大的数字尽可能交换到高位去  排序?还是直接暴力检索
       string bits=to_string(num);
       vector<int> index(bits.size());
       index[bits.size()-1]=bits.size()-1;
       for(int i=bits.size()-2;i>=0;i--){
            if(bits[i]>bits[index[i+1]]) index[i]=i;
            else index[i]=index[i+1];
       }
       for(int i=0;i<bits.size();i++){
           if(bits[index[i]]!=bits[i]) {
               swap(bits[index[i]],bits[i]);
               break;
           }           
       }
       return atoi(bits.c_str());
    }
};

 

标签:index,数字,int,670,交换,bits,leetcode,string
来源: https://www.cnblogs.com/TrenmenHu/p/16690570.html