求最大递增数
描述: |
输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 2895345323,递增数有:289,345,23, 那么最大的递减数为345。 |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: |
输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况 |
输出: |
输出最大递增数 |
样例输入: |
123526897215 |
样例输出: |
2689 |
思路:
我看到这道题的第一反应就是先把一组数中的递增数全部找出来,然后在所有递增数中找出最大的,这个思路的难点在于每个递增数的存储,开始想到数组,个数不能确定,所以只能用集合(选了ArrayList),再后来就是让人头疼的边界问题,字符串与整形数的转换问题。结果在自己的机子上运行成功,但在华为平台提交后还是有部分用例未通过,还请哪位朋友帮忙指正。
package com.liuhao; import java.io.*; import java.util.ArrayList; import java.util.List; public class MaxIncrease { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char[] charArr = str.toCharArray(); int result = 0; str = ""; List<String> arrayList = new ArrayList<String>(); for(int i=0; i<charArr.length-1; i++){ if(str.length() == 0){ str += charArr[i]; } if (charArr[i+1] > charArr[i] ){ str += charArr[i+1]; } else { if(str.length() > 1){ arrayList.add(str); } str = ""; } } arrayList.add(str); int[] a = new int[arrayList.size()]; for(int i=0; i<arrayList.size(); i++){ if(arrayList.get(i).length() != 0){ a[i] = Integer.parseInt(arrayList.get(i)); } } for(int i=0; i<a.length; i++){ if(a[i] > result){ result = a[i]; } } System.out.println(result); } }
显然,第一个思路显得臃肿拖沓。后来结合网上的一些资料整理了下面的精简版,我觉得这段代码的边界处理的比较精巧,不简单。
package com.liuhao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MaxIncrease2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char[] charArr = str.toCharArray(); //用于存放最大的递增数 int maxNum = 0; //str用做读入数据后边没用其他用处,就可以拿来放临时递增数 str = ""; for (int i=0; i<charArr.length; i++){ //将当前i指向的字符存到字符串中 if (str.length() ==0){ str += charArr[i]; } //题目巧合,恰好是比较一位的字符串,若是两位之上遍不可以直接比较字符 //如果第二个大于第一个,将第二个也存放到str中 //注意if的第一个条件 ***i < charArr.length-1*** if (i < charArr.length-1 && charArr[i+1] > charArr[i]){ str += charArr[i+1]; } //若不满足,表明当前递增数结束 //对该数进行比较,存储 else { int temp = Integer.parseInt(str); if(temp > maxNum){ maxNum = temp; } str = ""; } } System.out.println(maxNum); } }
相关推荐
NULL 博文链接:https://hoxis.iteye.com/blog/2034247
NULL 博文链接:https://hoxis.iteye.com/blog/2034237
华为机考试题+答案参照.pdf
华为机考练习试题汇总
华为_2020年数字IC笔试和2022年逻辑机考,FPGA,数字IC,逻辑岗刷题必备
华为机考一本通-2024
华为机考试题+答案.docx
华为OD机考-统一考试机试-含ABCD卷-含java、c++、JavaScript、python-题目截止到2023年年底
华为机考-软件测试试题
华为校招硬件技术工程师机考试卷试题包括答案.docx
一、内容概要:本文档从华为OD机考中精选100道经典题目,这些题目包括【5键键盘的输出】,【N进制减法】,【报数游戏】等等,并附上答案。 二、适合人群:具备一定编程基础,需要进行华为OD机考的小伙伴 三、能学到...
华为OD机考100题
2021年华为射频机考题目真题
华为OD系列--华为OD机考
华为近几年机考试题两份,仅供参考,主要是各个地区习题的集合
华为OD系列--华为OD机考三道题的代码,以及考试过程中的一个记录
2022华为od机考题_嵌入式-常用知识&面试题库_大厂面试真题.rar
华为OD系列--华为OD机考题目
华为校招·硬件技术工程师机考试题及答案.docx