[抄题]:
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开始往小试
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 字符串转数组,目标是数组,所以需要-'0'
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
- 字符串转数组,目标是数组,所以需要-'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;
}
}
670. Maximum Swap 允许交换一个数 求最大值的更多相关文章
-
LC 670. Maximum Swap
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
-
[LeetCode] 670. Maximum Swap 最大置换
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
-
670. Maximum Swap
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
-
[ACM_暴力] 最多交换k个数的顺序,求a[i]的最大连续和
/* http://codeforces.com/contest/426/problem/C 最多交换k个数的顺序,求a[i]的最大连续和 爆解 思路:Lets backtrack interval ...
-
c语言实现交换两个数的值
C语言中要实现交换两个数的值,可以有很多种方法,具体如下所述. 不使用中间变量: // 异或, a^=b^=a^=b; a ^= b; b ^= a; a ^= b; // 加减 a = a + b; ...
-
Qt_C++交换两个数
在编程过程中,交换两个数是我用常用的 ,这里做下简单的搬运 bool Widget::swap(int a, int b) { int temp =a; a= b; b = temp; } 这种方式其 ...
-
c# 任意多个数,求最大值
c# 任意多个数,求最大值 使用parms: 正在研究中,如果有好的方案,可评论,共同进步,共同提高,谢谢!
-
实现pow(int x, int y),即x的y次方 ; 异或交换两个数;
问题1:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h ...
-
Linux命令 swap:内存交换空间
swap 内存交换空间的概念 swap使用上的限制
随机推荐
-
Xcode的清除缓存
1.在“前往文件夹”中输入“ /Users/用户名/Library/Developer/Xcode/DerivedData ”,然后删除里面的东西
-
CodeForces 686C-Robbers&#39; watch
题意: 一个电子手表的示数是7进制的,现在告诉你一天有多少小时和一小时有多少分钟,问你一天里有多少个时刻,这个表上显示的数字各不相同. 分析: 先找出表上有多少位数字,再按位dfs,看最后得到的数是否 ...
-
JavaScript正则表达式(三)
正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档中使用一个正则表达式 ...
-
0810HTML(表单)
图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. <img src="a006.jpg" title="这是企鹅" ...
-
android用异步操作AsyncTask编写文件查看器
Activity程序 package com.example.fileasynctaskproject; import java.io.File; import java.util.ArrayList ...
-
Remove Duplicates from Sorted Array 解答
Question Given a sorted array, remove the duplicates in place such that each element appear only onc ...
-
mysql利用binlog进行数据恢复
目录 mysql利用binlog进行数据恢复 binlog基本配置和格式 binlog基本配置 查看binlog状态 binlog的三种格式 转换成sql mysql自带的mysqlbinlog 利用 ...
-
Text Justification leetcode java
题目: Given an array of words and a length L, format the text such that each line has exactly L charac ...
-
CSS为英文和中文字体分别设置不同的字体
font-family的调用方法: div { font-family:Arial,'Times New Roman','Microsoft YaHei',SimHei; font:bold 12px ...
-
Android下在onCreate中获取控件的宽度和高度(通过回调)
有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息, 而直接调用View组件的getWidth().getHeight().getMeasuredWidth().getMeasu ...