博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
670. Maximum Swap 允许交换一个数 求最大值
阅读量:4698 次
发布时间:2019-06-09

本文共 1656 字,大约阅读时间需要 5 分钟。

[抄题]:

Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

Example 1:

Input: 2736Output: 7236Explanation: Swap the number 2 and the number 7.

 

Example 2:

Input: 9973Output: 9973Explanation: No swap.

 [暴力解法]:

时间分析:

空间分析:

 [优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

数字强制转char会失败,必须用digits[buckets[k]] 值-index-值的三层转换

[思维问题]:

取最大、第二大再合并,莫名其妙写起来很麻烦。涉及到交换位置、索引有关的,用桶排序

[一句话思路]:

存索引,然后从9开始往小试

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 字符串转数组,目标是数组,所以需要-'0'

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

  1. 字符串转数组,目标是数组,所以需要-'0'

[复杂度]:

时间复杂度为O(N+K),空间复杂度也为O(N+K)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

前面的类型是什么就能转成什么

Integer.valueOf(String.valueOf(digits));

 

[算法思想:递归/分治/贪心]:

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

 [代码风格] :

 

class Solution {    public int maximumSwap(int num) {        //cc                        //ini: digits, buckets        char[] digits = String.valueOf(num).toCharArray();        int[] bucket = new int[10];                for (int i = 0; i < digits.length; i++) bucket[digits[i] - '0'] = i;        //for loop: exchange        for (int i = 0; i < digits.length; i++) {            for (int j = 9; j > digits[i] - '0'; j--) {                //if bigger index                if (bucket[j] > i) {                    char temp = digits[i];                    digits[i] = digits[bucket[j]];                    digits[bucket[j]] = temp;                    return Integer.valueOf(String.valueOf(digits));                 }            }        }                return num;    }}
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/9038577.html

你可能感兴趣的文章
Replication的犄角旮旯(二)--寻找订阅端丢失的记录
查看>>
自制 Word、Excel 批转 PDF 工具
查看>>
关于SQL Server 2005 的自动远程数据库备份
查看>>
SQL删除重复数据只保留一条
查看>>
如何利用 Visual Studio 自带工具提高开发效率
查看>>
【ASP.NET Web API教程】3.4 HttpClient消息处理器
查看>>
单点登录解决方案-CAS
查看>>
Qt-连续容器及迭代器
查看>>
截取字符串
查看>>
机器学习读书笔记(一)k-近邻算法
查看>>
设计类时需要注意的6个地方
查看>>
线程6-线程池
查看>>
使用 EclEmma 进行覆盖测试
查看>>
结组开发项目(TD学生助手)
查看>>
编辑距离
查看>>
我的Spring MVC第一个应用
查看>>
po3580SuperMemo(splay)
查看>>
全局锁实现
查看>>
有上下界的可行流
查看>>
EasyUI系列学习(一)-入门
查看>>