每日一题 2024-1-22 最大交换

1.题目(中等原题链接

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

示例 1 :

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

示例 2 :

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

注意:

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

2.解题思路

贪心,数字转换成字符串,从大到小排序,与原字符串从左到右对比,遇到不相同的就从原字符串倒着寻找这个字符,交换即可。

3.c++代码

class Solution {
public:
    int maximumSwap(int num) {
        auto s=to_string(num);
        auto t=s;
        ranges::sort(t,greater<>());
        int n=s.length();
        for(int i=0;i<n;i++){
            if(s[i]!=t[i]){
                int index=s.find_last_of(t[i]);
                swap(s[i],s[index]);
                break;
            }
        }
        return stoi(s);
    }
};

4.复杂度分析

  • 时间复杂度O(lognumloglognum)
  • 空间复杂度O(lognum)
posted @   sunyafei  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示