670. 最大交换

发布时间:2024年01月22日

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

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

示例 1 :

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

示例 2 :

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

注意:

  • 给定数字的范围是 [0, 10^8]

解题思路

将输入的数字转换为字符串数组,然后对该数组进行排序,得到一个按照从大到小排列的新数组 str。接下来,从头开始比较原数组和新数组中的元素,找到第一个不同的位置 ind。然后,在原数组中找到新数组中该位置的元素最后出现的位置 lastInd。将这两个位置上的元素进行交换。最后,将交换后的数组转换为字符串,再转回数字并返回。

AC代码

/**
 * @param {number} num
 * @return {number}
 */
var maximumSwap = function(num) {
    num = (num + '').split(''); // 将数字转为字符串,并将每个字符拆分成数组
    let str = [...num].sort((a,b)=>b - a); // 对数字排序,从大到小
    let ind = 0;
    while(ind < num.length && num[ind] === str[ind]){
        ind++; // 找到第一个不同的位置
    }
    const lastInd = num.lastIndexOf(str[ind]); // 找到要交换的数字在原数字中最后出现的位置
    [num[ind],num[lastInd]] = [num[lastInd],num[ind]]; // 交换数字
    return +(num.join('')); // 将交换后的数组转为字符串,再转回数字
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

文章来源:https://blog.csdn.net/Twinkle_sone/article/details/135754161
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。