• [LeetCode] 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.

    Note:

    1. The given number is in the range [0, 108]

    最大交换。

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

    思路是贪心,需要扫描两遍。首先我们把input的类型转换成charArray,这样方便之后的计算。同时我们需要一个长度为10的buckets,这样第一遍扫描input的时候,可以记录每个数字在 input 数字中最后一次出现的位置的下标。

    再次扫描input,对于当前index指向的数字,如果有一个大于他的数字在其右边,那么我们就把他们swap一下;如果一直没有这样的条件出现,那么说明input数字是不需要swap的。

    时间O(n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public int maximumSwap(int num) {
     3         char[] digits = Integer.toString(num).toCharArray();
     4         int[] buckets = new int[10];
     5         // 记录每个不同数字最后一次出现的位置
     6         for (int i = 0; i < digits.length; i++) {
     7             buckets[digits[i] - '0'] = i;
     8         }
     9 
    10         // 再次扫描
    11         // 对于每个数字,看是否有一个比当前这个数字更大的数字在右边,从9开始看
    12         // 若有,就swap过来
    13         for (int i = 0; i < digits.length; i++) {
    14             for (int k = 9; k > digits[i] - '0'; k--) {
    15                 if (i < buckets[k]) {
    16                     char temp = digits[i];
    17                     digits[i] = digits[buckets[k]];
    18                     digits[buckets[k]] = temp;
    19                     return Integer.valueOf(new String(digits));
    20                 }
    21             }
    22         }
    23         return num;
    24     }
    25 }

    LeetCode 题目总结

  • 相关阅读:
    Java 8 Lambda 表达式
    OSGi 系列(十二)之 Http Service
    OSGi 系列(十三)之 Configuration Admin Service
    OSGi 系列(十四)之 Event Admin Service
    OSGi 系列(十六)之 JDBC Service
    OSGi 系列(十)之 Blueprint
    OSGi 系列(七)之服务的监听、跟踪、声明等
    OSGi 系列(六)之服务的使用
    OSGi 系列(三)之 bundle 事件监听
    OSGi 系列(三)之 bundle 详解
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14553039.html
Copyright © 2020-2023  润新知