华为南研所机考练习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 arrayList = new ArrayList();
		
		for(int i=0; i 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 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[i]){
				str += charArr[i+1];
			}
			
			//若不满足,表明当前递增数结束
			//对该数进行比较,存储
			else {
				int temp = Integer.parseInt(str);
				if(temp > maxNum){
					maxNum = temp;
				}
				
				str = "";
			}
		}
		
		System.out.println(maxNum);
	}

}

 

你可能感兴趣的:(Java,试题)