• 670. Maximum Swap


    问题:

    给定一个非负整数,求只交换一次某两位的数字,使得值最大,求该最大值。

    Example 1:
    Input: 2736
    Output: 7236
    Explanation: Swap the number 2 and the number 7.
    
    Example 2:
    Input: 9973
    Output: 9973
    Explanation: No swap.
    
    Note:
    The given number is in the range [0, 108]
    

      

    解法:

    从右向左遍历。

    取得最大数字,

    往左边轮询时,只要发现比他小的数字,即可先记下来,将来可以交换。

    而越往左,替换的位数越高,所换得的数字会更大。

    因此最后记下的数字,即是应该交换的数字。

    代码参考:

     1 class Solution {
     2 public:
     3     int maximumSwap(int num) {
     4         string numchar=to_string(num);
     5         int maxv=-1, maxidx, leftidx=0, rightidx=0;
     6         for(int i=numchar.length()-1; i>=0; i--){
     7             if(numchar[i]>maxv){
     8                 maxv=numchar[i];
     9                 maxidx=i;
    10                 continue;
    11             }
    12             if(numchar[i]<maxv){
    13                 leftidx=i;
    14                 rightidx=maxidx;
    15             }
    16         }
    17         swap(numchar[leftidx],numchar[rightidx]);
    18         return stoi(numchar);
    19     }
    20 };
  • 相关阅读:
    pyDNS学习
    BUUCTF password
    攻防世界 easy-apk
    Android Normal writeup
    Jarvis OJ
    阿里云服务器连接(安装)宝塔面板
    bmp格式转为jpeg格式文件
    课设记录-Day15
    课设记录-Day14
    课设记录-Day13
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12744383.html
Copyright © 2020-2023  润新知