栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 670. 最大交换*

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 670. 最大交换*

具体思路:

第一时间想起了单调栈,可以做,但是中间有个用例细节注意一下;

单调递减栈的栈头必定为最大元素,但是要注意最大元素可能有多个情况,我们要把靠近低位的最大元素进行交换,所以要继续判断;

官方题解则是记录每位的最后一次出现为止,保证该元素在当前判断的之后,就可以进行交换;

具体代码: 1.单调栈版本:
class Solution {
public:
    int maximumSwap(int num) {
        int temp=num;
        string s="";
        while(num!=0){
            s=char('0'+num%10)+s;
            num/=10;
        }
        vectorst;
        for(int i=0;i
            while(!st.empty()&&s[*st.rbegin()]
                st.pop_back();
            }
            st.push_back(i);
        }
        if(st.size()==s.size())
            return temp;
        int index=0;
        for(int i=0;i
            if(index!=st[i])
                break;
            index++;
        }
        int change=index;
        while(change+1
            ret=ret*10+int(s[i]-'0');
        }
        return ret;
    }
};
2.官方题解版本:
class Solution {
public:
    int maximumSwap(int num) {
        int ret=num;
        vectorrecord(10,-1);
        string s=to_string(num);
        for(int i=0;i
            record[s[i]-'0']=i;
        }
        for(int i=0;i
            for(int j=9;j>0;j--){
                if(record[j]!=-1&&j>int(s[i]-'0')&&record[j]>i){
                    swap(s[i], s[record[j]]);
                    return stoi(s);
                }
            }
        }
        return num;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号