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

目录
相关文章
|
10天前
|
算法 安全 Java
介绍一下比较与交换算法
【10月更文挑战第20天】介绍一下比较与交换算法
8 0
|
4月前
|
存储 缓存 大数据
三种交换方式的比较
互联网核心部分主要由路由器构成,负责分组交换。路由器是网络中转发数据的关键,它接收和转发分组,确保边缘部分的主机间通信。通信方式包括: 1. 电路交换- 用于早期电话系统,先建立连接,然后通话,最后释放,适合连续大数据传输,但线路利用率低。 2. **分组交换** - 常见于现代互联网,数据被分割成分组,每个独立转发,提高了线路效率和灵活性。 3. 报文交换-整个报文一次性转发,存储转发,适合小规模、非实时通信,但时延较长。 分组交换结合了高效和灵活性,是互联网核心的优选技术。
136 5
|
6月前
[leetcode] 670. 最大交换 M
[leetcode] 670. 最大交换 M
|
6月前
|
索引
leetcode-670:最大交换
leetcode-670:最大交换
39 0
|
存储 算法
交换算法(交换两个数字)
交换算法(交换两个数字)
86 0
【C两数交换】实现ab交换居然有三种方法?
【C两数交换】实现ab交换居然有三种方法?
151 0
【C两数交换】实现ab交换居然有三种方法?
|
算法 安全 网络虚拟化
交换的工作原理之交换知识总结
当交换机收到数据之后,第一步先进行学习,将数据的mac与端口进行绑定存在mac表中,然后在根据数据的源mac在mac中查找,有的话就进行相应的转发,没有的话就以广播的形式在出接受端口以外的所有端口进行转发
299 0
交换的工作原理之交换知识总结
|
Java Python
交换吧,链表!
交换吧,链表!
交换吧,链表!