题目:

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

示例 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. python3中print()函数打印多个变量值

    第一种方法: print("变量1", file_name, "变量2", new_name) print("变量1", file_name ...

  2. 2.4g无线私有协议透传方案特色梳理

    为什么?  在2.4G这个频段,的确有待你拥挤,有提供高速上网的wifi,有提供短距离数据和云音乐传输的bt,还要各种xx的东西.在wifi和bt无法覆盖的领域,又出来一个2.4G私有协议传输芯片,这 ...

  3. Android自定义View使用系统自有属性

    原文链接: Android自定义View使用系统自有属性 - Stars-One的杂货小窝 本篇默认各位有自定义View的相关知识,本篇只作为一个小知识点补充 有这样一种情况,比如说我们的一个自定义V ...

  4. pandas:如何保存数据比较好?

    我们在使用pandas处理完数据之后,最终总是要把数据作为一个文件保存下来,那么,保存数据最常用的文件是什么呢?我想大部分人一定会选择csv或者excel. 刚接触数据分析时,我也是这么选择的,不过, ...

  5. Global AI Bootcamp 成都站 圆满结束!

    3月10日星期天下午2点「Global AI Bootcamp 2024 - 成都站」,在成都银泰中心蔚来汽车会议区圆满结束了! 本次活动共计吸引了约50名IT行业从业者线下参与,他们分别来自成都各行 ...

  6. Linux 运维工程师面试真题-1-必会Linux 操作系统知识

    Linux 运维工程师面试真题-1-必会Linux 操作系统知识 运维的整个面试流程其实是非常繁杂的,为了方便大家准备,我们特地在这里给大家整理了 一些 Linux 系统运维相关的面试题,有些问题没有 ...

  7. 使用Servlet实现文件下载

    一位朋友最近在学习JavaWeb开发,开始学习文件下载操作,他自己尝试着去网上看一些教程,总的来说也不是太了解,就让我和他说说,如何实现文件下载功能.我和他说了一下大致的思路,主要分为前端和后端两部分 ...

  8. 3D渲染慢,直接买显卡还是用云渲染更划算?

    3D渲染对建筑师和设计师来说并不陌生,3D渲染的过程中出现渲染卡顿.特殊材质难以渲染,或者本地配置不足.本地渲染资源不够时,常常会影响工作效率.本文比较了3D渲染时,为提高工作效率,买显卡还是用云渲染 ...

  9. iOS Modern Collection View

    TL;DR 使用的技术: Compositional layout + Diffable data source.iOS 14+. 创建 layout 以描述布局: 创建 dataSource 以提供 ...

  10. 《Go程序设计语言》学习笔记之数组

    <Go程序设计语言>学习笔记之数组 一. 环境 Centos8.5, go1.17.5 linux/amd64 二. 概念 数组是具有固定长度且拥有零个或多个相同数据类型元素的序列. 三. ...