题目:

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

示例 1 :

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

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

注意: 给定数字的范围是 [0, 108]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.首先将数字转换成字符数组便于遍历每一个数字;

2.数字从后往前遍历,用一个数组记录每一个数字对应的最大索引;

3.再从头遍历原数组,当原数组的值与当前位置对应的最大索引值的原数组的值不相等时(有点绕口,看下面的例子就清楚了),就进行交换,交换完成就退出循环,将字符数组转换成整数输出即为结果。

例1:

数字98367

1.先确定最大索引值数组maxArr=[0,1,4,4,4]

从后往前遍历:
遍历7:最大值是7,7的索引值为4
遍历6:最大值是7,7的索引值为4
遍历3:最大值是7,7的索引值为4
遍历8:最大值是8,8的索引值为1
遍历9:最大值是9,9的索引值为0

2.进行原数组遍历,当原数组与当前最大值索引对应的值不相等时进行交换,结果为98763

nums[0] = 9, nums[maxArr[0]] = 9,相等不交换跳过;
nums[1] = 8, nums[maxArr[1]] = 8,相等不交换跳过;
nums[2] = 3, nums[maxArr[2]] = 7,不相等,进行交换为98763;

例2:

数字97257

1.先确定最大索引值数组maxArr=[0,4,4,4,4]

从后往前遍历:
遍历7:最大值是7,7的索引值为4
遍历5:最大值是7,7的索引值为4
遍历2:最大值是7,7的索引值为4
遍历7:最大值是7,7的索引值为4
遍历9:最大值是9,9的索引值为0

2.进行原数组遍历,当原数组与当前最大值索引对应的值不相等时进行交换,结果为98763

nums[0] = 9, nums[maxArr[0]] = 9,相等不交换跳过;
nums[1] = 7, nums[maxArr[1]] = 7,相等不交换跳过;
nums[2] = 2, nums[maxArr[2]] = 7,不相等,进行交换为97752;

代码:

 1 class Solution {
2 public int maximumSwap(int num) {
3 //将数字转换成字符数组
4 char[] nums = Integer.toString(num).toCharArray();
5 int[] maxArr = new int[nums.length];
6 int maxIdx = nums.length - 1;
7 //确定最大索引值数组
8 for(int i = nums.length - 1; i >= 0; i--){
9 if(nums[i] > nums[maxIdx]){
10 maxIdx = i;
11 }
12 maxArr[i] = maxIdx;
13 }
14
15 for(int i = 0; i < nums.length; i++){
16 if(nums[maxArr[i]] != nums[i]){
17 char temp = nums[i];
18 nums[i] = nums[maxArr[i]];
19 nums[maxArr[i]] = temp;
20 break;
21 }
22 }
23 return Integer.parseInt(new String(nums));
24
25 }
26 }

力扣670(java)-最大交换(中等)的更多相关文章

  1. 力扣—— Swap Nodes in Pairs(两两交换链表中的节点) python实现

    题目描述: 中文: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, ...

  2. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  3. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  4. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

  5. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  6. JS数据结构第六篇 --- 二叉树力扣练习题

    1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...

  7. 力扣—Reorder List(重排链表)python实现

    题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...

  8. 力扣——Reverse Nodes in k-Group(K 个一组翻转链表) python实现

    题目描述: 中文: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序 ...

  9. 【力扣leetcode】-787. K站中转内最便宜的航班

    题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...

  10. 【力扣】922. 按奇偶排序数组 II

    给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组 ...

随机推荐

  1. WPF之事件

    目录 WPF的树形结构 事件 路由事件 使用WPF内置路由事件 自定义路由事件 ButtonBase类的Click路由事件 创建一个路由事件 RoutedEventArgs的Source与Origin ...

  2. day04-原生的API&注解方式

    原生的API&注解方式 1.MyBatis原生的API调用 1.1原生API快速入门 需求:在前面的项目基础上,使用MyBatis原生的API完成,即直接通过SqlSession接口的方法来完 ...

  3. Android混淆后的bug日志通过mapping文件找对应行号

    背景 由于项目中提测以及线上的apk都是经过混淆处理的,因此拿到日志后也无法正常查看崩溃日志的行号 这个原因是因为混淆了文件,输出的日志是对应不上源文件的,为了正确找到行号需要用到mapping.tx ...

  4. PXE批量安装操作系统自动化

    PXEz自动化 在PXE服务器操作: *yum -y install dhcp xinetd tftp tftp-server* *yum -y install system-config-kicks ...

  5. 03.Java数据结构问题

    目录介绍 3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代 ...

  6. 记录--for in 和 for of的区别详解以及为for in的输出顺序

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 for in 和 for of 相对于大家肯定都不陌生,都是用来遍历属性的没错.那么先看下面的一个例子: 例1 const obj = { ...

  7. Avalonia项目生成银河麒麟操作系统安装包

    1 在项目根目录添加xxx.desktop文件,文件内容: [Desktop Entry] Name=xxx Type=Application Exec=/usr/share/xxx/xxx Icon ...

  8. 【论文项目复现1】漏洞检测项目复现_VulDeeLocator

    复现环境 Ubuntu 20.04 CPU: 32G GPU: 11G 2080ti Source2slice: clang-6.0 + llvm + dg (dg: https://github.c ...

  9. C#文件加密解密

    加密后内容 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  10. UE4中的GamePlay模块

    链接 该文档主要通过学习自己构建文件,形成GamePlay模块.下图是利用引擎创建的一个空模板C++代码结构 简要流程 UBT 虚幻编译工具(UBT:Unreal Build Tool)是一个自定义工 ...