冉8566 发表于 2016-6-7 08:16:53

华为南研所机考练习2 -求最大递增数

求最大递增数



描述:
  输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 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;
}

if (charArr > charArr ){
str += charArr;
}
else {
if(str.length() > 1){
arrayList.add(str);
}
str = "";
}
}
arrayList.add(str);
int[] a = new int;
for(int i=0; i<arrayList.size(); i++){
if(arrayList.get(i).length() != 0){
a = Integer.parseInt(arrayList.get(i));
}
}
for(int i=0; i<a.length; i++){
if(a > result){
result = a;
}
}
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;
}
//题目巧合,恰好是比较一位的字符串,若是两位之上遍不可以直接比较字符
//如果第二个大于第一个,将第二个也存放到str中
//注意if的第一个条件 ***i < charArr.length-1***
if (i < charArr.length-1 && charArr > charArr){
str += charArr;
}
//若不满足,表明当前递增数结束
//对该数进行比较,存储
else {
int temp = Integer.parseInt(str);
if(temp > maxNum){
maxNum = temp;
}
str = "";
}
}
System.out.println(maxNum);
}
}

  
页: [1]
查看完整版本: 华为南研所机考练习2 -求最大递增数