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
  • 相关阅读:
    jmeter怎么衡量tps的值
    QPS、TPS、并发用户数、吞吐量关系
    PPAPI插件开发指南
    WebRTC手记之WebRtcVideoEngine2模块
    WebRTC手记Channel概念
    WebRTC手记之本地音频采集
    WebRTC手记之本地视频采集
    WebRTC手记之框架与接口
    WebRTC手记之初探
    Chromium的GPU进程启动流程
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9038577.html
Copyright © 2011-2022 走看看