670. 最大交换

简介: 670. 最大交换

说在前面

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

题目描述

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

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

目录
相关文章
|
1月前
[leetcode] 670. 最大交换 M
[leetcode] 670. 最大交换 M
|
1月前
|
索引
leetcode-670:最大交换
leetcode-670:最大交换
25 0
|
存储 算法
交换算法(交换两个数字)
交换算法(交换两个数字)
69 0
【C两数交换】实现ab交换居然有三种方法?
【C两数交换】实现ab交换居然有三种方法?
133 0
【C两数交换】实现ab交换居然有三种方法?
|
算法 安全 网络虚拟化
交换的工作原理之交换知识总结
当交换机收到数据之后,第一步先进行学习,将数据的mac与端口进行绑定存在mac表中,然后在根据数据的源mac在mac中查找,有的话就进行相应的转发,没有的话就以广播的形式在出接受端口以外的所有端口进行转发
261 0
交换的工作原理之交换知识总结
|
Java Python
24_两两交换链表中的节点
24_两两交换链表中的节点
86 0
利用函数进行交换(c++)
利用函数进行交换(c++)