LeetCode 670 最大交换[暴力 贪心] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 670 最大交换[暴力 贪心] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
由于给定的位数最大为8位,那么即使用暴力的方式最多也只要交换28次,所以第一种方法就是暴力交换任意两位,找到找到最大值并返回,代码如下:
class Solution
public:
int maximumSwap(int num)
string s = to_string(num);
int n = s.size();
int maxNum = num;
for(int i = 0; i < n; i ++)
for(int j = i + 1; j < n; j ++)
// 换过来
swap(s[i], s[j]);
maxNum = max(maxNum, stoi(s));
// 换回去
swap(s[i], s[j]);
return maxNum;
;
时间复杂度: O(log2 num)
空间复杂度: O(log num)
第二种方法是通过贪心的方式,定义一个最大下标,指向每位最大的数,再定义两个下标,指向想要交换的位数,从后往前遍历整数,遇到大的更新最大下标,遇到小的更新交换的下标,代码如下:
class Solution
public:
int maximumSwap(int num)
string s = to_string(num);
int n = s.size();
int maxIdx = n - 1;
int idx1 = -1, idx2 = -1;
for(int i = n - 1; i >= 0; i --)
if(s[i] > s[maxIdx])
maxIdx = i;
else if(s[i] < s[maxIdx])
idx1 = i;
idx2 = maxIdx;
if(idx1 >= 0)
swap(s[idx1], s[idx2]);
return stoi(s);
return num;
;
时间复杂度: O(log num)
空间复杂度: O(log num)
以上是关于LeetCode 670 最大交换[暴力 贪心] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章