zoukankan      html  css  js  c++  java
  • [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 题目总结

  • 相关阅读:
    DropDownList判断值是否存在下拉列表中
    postgre教程
    Cookie seesion 赋值
    Winform定时启动
    ASP.NET数据绑定控件
    ASP.NET常用数据绑定控件优劣总结
    Cards and Joy (dp好题)
    River Hopscotch (二分)
    剪花布条(KMP入门)
    GCD (区间数的质因子打表+容斥原理)
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14553039.html
Copyright © 2011-2022 走看看