标签:bucket i++ dig new not swa 扫描 solution http
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:
最大交换。
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
思路是贪心,需要扫描两遍。首先我们把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 }
标签:bucket i++ dig new not swa 扫描 solution http
原文地址:https://www.cnblogs.com/cnoodle/p/14553039.html