zoukankan      html  css  js  c++  java
  • [Leetcode]670.Maximum Swap

    链接:LeetCode670

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

    示例 1 :

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

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

    要想得到最大的数值,自然是将最大的放最前面,那么我们在遍历数组的时候,如果出现最大值不在前面的情况,则将该位与最大数交换即可。另外,有一种情况,特别需要注意,例如出现8577的时候,我们自然是将5与7交换,但这里的7是指最末尾的7。这也很自然,我们要将大数放到尽量前面,也要将小数放到尽量后面。

    代码如下:

    python:

    class Solution:
        def maximumSwap(self, num: int) -> int:
            nums = list(str(num))
            sorted_nums = sorted(nums)[::-1]
            for i in range(len(nums)):
                if nums[i]!=sorted_nums[i]:
                    max_num = max(nums[i:])
                    index = len(nums)-1-nums[::-1].index(max_num)
                    nums[i],nums[index] = nums[index],nums[i]
                    break
            return int(''.join(nums))
    

    C++:

    class Solution {
    public:
        int maximumSwap(int num) {
            string res = to_string(num),back=res;
            for(int i=res.size()-2;i>=0;--i){
                back[i] = max(back[i],back[i+1]);
            }
            for(int i=0;i!=res.size();++i){
                if(res[i]==back[i]) continue;
                for(int j=res.size()-1;j>i;--j){
                    if (res[j]==back[i]){
                        swap(res[i],res[j]);
                        return stoi(res);
                    }
                }
            }
            return stoi(res);
        }
    };
    

    参考:[LeetCode] 670. Maximum Swap 最大置换(https://www.cnblogs.com/grandyang/p/7583875.html)

  • 相关阅读:
    Lucky Substrings
    KMP
    圆桌问题(hdu4841)
    codeforces 624C Graph and String
    Joseph(hdu1443)
    The Longest Straight(FZUoj2216)
    C1. 组队活动 Small(BNUOJ)
    A1. 道路修建 Small(BNUOJ)
    Problem 2221 RunningMan(fuzoj)
    CODEFORCEs 621E. Wet Shark and Blocks
  • 原文地址:https://www.cnblogs.com/hellojamest/p/12259316.html
Copyright © 2011-2022 走看看