华为南研所机考练习2 -求最大递增数
程序员文章站
2022-05-03 12:18:33
...
求最大递增数
描述: |
输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 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); } }