2024-1-22
文章目录
- [670. 最大交换](https://leetcode.cn/problems/maximum-swap/)
- 思路:
670. 最大交换
思路:
从后往前遍历整数的字符数组,找到第一个比当前最大值小的数字,然后将该数字与最大值进行交换。
- 将给定的整数转换为字符数组。
- 初始化变量
maxIdx
为字符数组的最后一个索引,用于记录当前最大值的索引。 - 初始化变量
idx1
和idx2
为-1,用于记录需要交换的两个索引。 - 从字符数组的最后一个元素开始往前遍历。
- 如果当前字符比最大值大,则更新最大值的索引
maxIdx
。 - 如果当前字符比最大值小,则将当前索引赋值给
idx1
,将maxIdx
赋值给idx2
。
- 如果当前字符比最大值大,则更新最大值的索引
- 判断是否存在需要交换的索引:
- 如果 idx1大于等于0,说明存在需要交换的索引。调用
swap
函数交换字符数组中idx1
和idx2
位置对应的字符。将字符数组转换为整数,并返回结果。 - 如果不存在需要交换的索引,直接返回原始整数。
- 如果 idx1大于等于0,说明存在需要交换的索引。调用
public int maximumSwap(int num) {
char[] charArray = String.valueOf(num).toCharArray(); // 将整数转换为字符数组
int n = charArray.length;
int maxIdx = n - 1; // 记录当前最大值的索引,默认为最后一位
int idx1 = -1, idx2 = -1; // 记录需要交换的两个索引,默认为-1
for (int i = n - 1; i >= 0; i--) { // 从后往前遍历字符数组
if (charArray[i] > charArray[maxIdx]) { // 如果当前字符比最大值大
maxIdx = i; // 更新最大值的索引
} else if (charArray[i] < charArray[maxIdx]) { // 如果当前字符比最大值小
idx1 = i; // 记录第一个需要交换的索引
idx2 = maxIdx; // 记录第二个需要交换的索引为当前最大值的索引
}
}
if (idx1 >= 0) { // 如果存在需要交换的索引
swap(charArray, idx1, idx2); // 交换两个索引对应的字符
return Integer.parseInt(new String(charArray)); // 将字符数组转换为整数并返回
} else {
return num; // 如果不存在需要交换的索引,则返回原始整数
}
}
public void swap(char[] charArray, int i, int j) { // 交换字符数组中两个索引对应的字符
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
点击移步博客主页,欢迎光临~