• 670. Maximum Swap 允许交换一个数 求最大值


    [抄题]:

    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: 2736
    Output: 7236
    Explanation: Swap the number 2 and the number 7.
    

    Example 2:

    Input: 9973
    Output: 9973
    Explanation: 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
  • 相关阅读:
    Spring-AOP切面编程(3)
    【SpringBoot】SpingBoot整合AOP
    反射--Reflection
    泛型--Generic
    C#系统库的源代码
    C#中的?
    C#语法糖
    C#初识LINQ
    C#委托和事件的区别
    C#中的lambda表达式
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9038577.html
Copyright © 2020-2023  润新知