LeetCode 0670. 最大交换
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0670. 最大交换相关的知识,希望对你有一定的参考价值。
【LetMeFly】670.最大交换
力扣题目链接:https://leetcode.cn/problems/maximum-swap/
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 108]
方法一:两次遍历
要想使得一次交换的结果尽量大,那么越大的数就要尽可能地越靠前。
因此,直接第一层循环枚举“尽可能前”的位置,第二层循环寻找之后的最大且尽可能靠后的元素。
如果找到了比前面大的元素,就交换二者,并返回结果。
- 时间复杂度 O ( log 2 n u m ) O(\\log^2 num) O(log2num)
- 空间复杂度 O ( log n u m ) O(\\log num) O(lognum)
AC代码
C++
class Solution
public:
int maximumSwap(int num)
string s = to_string(num);
for (int i = 0; i < s.size(); i++)
int locM = -1;
char M = 0;
for (int j = i + 1; j < s.size(); j++)
if (s[j] > s[i] && s[j] >= M)
locM = j, M = s[j];
if (locM != -1)
swap(s[i], s[locM]);
return atoi(s.c_str());
return atoi(s.c_str());
;
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126826280
以上是关于LeetCode 0670. 最大交换的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)