zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    EntityFramework 实践 Overview
    Retrofit 实践
    elasticsearch入门
    正则如何不匹配该内容
    windows下安装了2个python,如何下载模块到不同的python中
    python中 遇到的读取坑2.7和3.6版本的问题
    如何在idea中加载本地中已有的python
    如何在linux上有2个python的情况下安装gensim
    正则表达式,包含此内容(不管是前面还是后面)
    rdd里的foreach无法对外界产生影响
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9038577.html
Copyright © 2011-2022 走看看