leetcode-670:最大交换

简介: leetcode-670:最大交换

题目

题目连接

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

示例 1 :

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

示例 2 :

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

解题

方法一:贪心

贪心:从头遍历,找到右侧一个比它大,且值最大的数。

比如2734, 在2的右边最大是7,因此交换结果7234

又比如27734,在2的右边最大是7,那么要交换最后一个7才能保证最大,结果为77234

因此使用maxRight记录当前索引,右侧最大的数

class Solution {
public:
    int maximumSwap(int num) {
        string s=to_string(num);
        int n=s.size();
        vector<int> maxRight(n);
        char maxnum=-1;
        for(int i=n-1;i>=0;i--){
            maxnum=max(maxnum,s[i]);
            maxRight[i]=maxnum;
        }
        for(int i=0;i<n;i++){
            if(s[i]<maxRight[i]){
                int j=n-1;
                while(j>0&&s[j]!=maxRight[i]) j--;
                swap(s[i],s[j]);
                return stoi(s);
            }
        }
        return num;
    }
};
相关文章
|
1月前
|
测试技术
力扣888 公平糖果交换
力扣888 公平糖果交换
|
6月前
|
Java
24. 两两交换链表中的节点 -- 力扣 --JAVA
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
31 0
|
1月前
|
测试技术
LeetCode | 24.两两交换链表中的节点(C语言版)
LeetCode | 24.两两交换链表中的节点(C语言版)
50 0
|
18天前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
19天前
|
存储 机器学习/深度学习 算法
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
|
19天前
|
存储 SQL 算法
|
1月前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
21 0
|
1月前
|
人工智能
888. 公平的糖果棒交换(力扣)
888. 公平的糖果棒交换(力扣)
|
1月前
[leetcode] 670. 最大交换 M
[leetcode] 670. 最大交换 M
|
1月前
|
Java
LeetCode题解- 两两交换链表中的节点-Java
两两交换链表中的节点-Java
18 0