【LeetCode每日一题】670. 最大交换

2024-1-22

文章目录

      • [670. 最大交换](https://leetcode.cn/problems/maximum-swap/)
          • 思路:

670. 最大交换

【LeetCode每日一题】670. 最大交换_第1张图片

思路:

从后往前遍历整数的字符数组,找到第一个比当前最大值小的数字,然后将该数字与最大值进行交换。

  1. 将给定的整数转换为字符数组。
  2. 初始化变量 maxIdx 为字符数组的最后一个索引,用于记录当前最大值的索引。
  3. 初始化变量 idx1idx2 为-1,用于记录需要交换的两个索引。
  4. 从字符数组的最后一个元素开始往前遍历。
    • 如果当前字符比最大值大,则更新最大值的索引 maxIdx
    • 如果当前字符比最大值小,则将当前索引赋值给 idx1,将 maxIdx 赋值给 idx2
  5. 判断是否存在需要交换的索引:
    • 如果 idx1大于等于0,说明存在需要交换的索引。调用 swap 函数交换字符数组中 idx1idx2 位置对应的字符。将字符数组转换为整数,并返回结果。
    • 如果不存在需要交换的索引,直接返回原始整数。
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;
}

点击移步博客主页,欢迎光临~

偷cyk的图

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)