力扣解题思路:670. 最大交换/parseInt和valueOf的区别
670. 最大交换
思路:
看到这题我第一反应就是想到下一个排列,不过很快发现这两题并没办法使用同一种思路,因为这一题是要求最大,且只能交换一次,相当于多了很多别的限制。
初步的思路是,直接将数组排序,然后和原来的数组从左往右不断对比,如果一样就下一位,如果不一样则往数组后面找到这个最大数,然后交换位置,交换完就直接break即可:
public int maximumSwap(int num) {if(num<10) return num;char[] ary = (num+"").toCharArray();char[] copy = new char[ary.length];System.arraycopy(ary,0,copy,0,ary.length);Arrays.sort(copy);for(int i=0;i<ary.length;i++){char tmp = copy[ary.length-1-i];if(ary[i]!=tmp){int idx = i;for(int j=i+1;j<ary.length;j++){if(ary[j]==tmp) idx = j;}ary[idx] = ary[i];ary[i] = tmp;break;}}return Integer.parseInt(new String(ary));}
但是这样嵌套了两层循环而且发生了排序,实在不够优雅,因为我们还需要可以去找这个大数对应的索引,那么我们不如这样,我们记录每个数的后面(包括本身)的最大数值的索引,最后从左往右遍历数组观察是否最大数和当前数一样,若不一样则交换后break,若一样就下一位,这样就可以不用排序啦:
char[] chars = Integer.toString(num).toCharArray();int maxIdx = chars.length - 1;int[] maxArr = new int[chars.length];for (int i = chars.length - 1; i >= 0 ; i--) {if (chars[i] > chars[maxIdx]) {maxIdx = i;}maxArr[i] = maxIdx;}for (int i = 0; i < chars.length; i++) {if (chars[maxArr[i]] != chars[i]) {char temp = chars[maxArr[i]];chars[maxArr[i]] = chars[i];chars[i] = temp;break;}}return Integer.parseInt(new String(chars));
这里顺带补充一下其他知识,parseInt和valueOf的区别:
1、返回值不同
parseInt 返回值是int型
valueof 返回值是Integer型
public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10);}
2、valueof就是调用了parseInt方法的
public static Integer valueOf(String s) throws NumberFormatException {return Integer.valueOf(parseInt(s, 10));}
3、parseInt效率比valueof效率高
力扣解题思路:670. 最大交换/parseInt和valueOf的区别相关推荐
- 力扣解题思路:位运算系列
交换两个整数 思路:给定a,b用位运算交换两个数的值: a = a ^ b; b = a ^ b;//b = a ^ b ^ b (这里a,b是初始a,b) a = a ^ b;//a = a ^ b ...
- 力扣解题思路:脑筋急转弯系列
172. 阶乘后的零 思路:给定一个整数 n,返回 n! 结果尾数中零的数量. 我们知道,尾部的 0 由 2 * 5 得来,2 的数量明显多于 5 的数量,因为2永远先于5出现,因此只要统计有多少个 ...
- 力扣解题思路:488. 祖玛游戏
488. 祖玛游戏 思路: 实际上就是简单的消消乐,如果时间允许,最简单的暴力递归法也是可以的,就是把所有字母插入所有的位置,取最短且可以消去的插入球数即可.但是这样无脑插入是很浪费时间的,所以我们在 ...
- 力扣解题思路:java 解数独
37. 解数独 思路:编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个 ...
- parseint与valueOf的区别
string转int中的parseint与valueOf ①首先我们先来了解什么是装箱与拆箱: 装箱:普通类型转换为包装类型 Eg:integer i=10; 拆箱:包装类转换为普通类型 Eg:int ...
- 力扣解法汇总670-最大交换
目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...
- 力扣解题——求根到叶子节点数字之和
难度:中等 题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到 ...
- Java Integer类中的parseInt和valueOf的区别
如果我们想把一个字符串转化成int类型,那么Integer类里的parseInt()和valueOf()都可以实现. 但是既然有两个方法实现该功能,那么两个方法一定是有区别的. 首先来看parseIn ...
- 力扣小周推荐——最大交换
文章目录 我的做法 更新时间复杂度更低的方法 小周让我做的一道题,俺kuakua两下,不到俩小时就做完了,虽然也不快,但也狠狠平复了轮换数组那道题的伤o(╥﹏╥)o 我的做法 思路:从第一个位置开始, ...
最新文章
- pytorch模型转onnx-量化rknn(bisenet)
- 网络营销外包——网络营销外包专员如何提升首页关键词的转化率
- 交叉编译inetutils并配置telnet服务
- python golang 小工具_使用Go语言简单模拟Python的生成器
- 这样讲闭包,你终生难忘
- 大数据笔记--Spark机器学习(第一篇)
- 插入排序、冒泡排序、归并排序、快速排序
- 支付宝扫码枪收银的实现原理你了解吗?
- android toast 大小,Android Toast实现全屏显示
- 2021react复习
- vue基于Echarts的拖拽数据可视化功能实现
- Oracle EBS Workflow简介和客制之后的感想
- python正态分布拟合曲线怎么打印出中位数值,如何用对数正态分布函数拟合数据...
- Java Web项目是怎么跑起来的?
- jQuery—常用API(jQuery 属性操作、jQuery 文本属性值、jQuery 元素操作)
- 资金、时间、盈利“三杀坎”,外卖尾部平台如何求生?
- 多元线性回归的正规方程解
- Python笔记(1-20)
- 云原生可观察性之日志管理
- 调优为王!阿里巴巴彩版java性能调优实战,终于到手了!
热门文章
- 外包没有资格 WFH?
- fgo服务器维护抽卡,fgo抽卡机制讲解 fgo卡池概率分析
- multi-class分类模型评估指标的定义、原理及其Python实现
- 张一鸣 90 亿购得元宇宙入场券,谁将是头号玩家?
- 鸿蒙系统上市前你还买华为吗,鸿蒙并非首发于P50,华为4G新机提前截胡,直接搭载鸿蒙系统上市...
- FlexCell demo
- python输入_Python输入
- 如何提高自己博客的人气
- Huggingface填坑:Unexpected key(s) in state_dict: “roberta.pooler.dense.weight“....
- 任正非:过去我们是为了赚点小钱,现在是要战胜美国