码迷,mamicode.com
首页 > 其他好文 > 详细

2017-08-23 华为笔试第二道编程题详解

时间:2017-08-24 21:26:23      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:for   return   nbsp   参考   测试   back   示例   class   sys   

[题目描述] 

给定一个整数,给出消除重复数字以后最大的整数

输入描述 :正整数,注意考虑长整数

输出描述 : 消除重复数字后的最大整数

[示例1]

输入 : 423234

输出 : 432

[思路]

使用栈作为辅助工具,首先从前往后遍历数组

* 栈为空就压入栈

* 栈非空,判断当前数组元素是否大于栈顶元素

  * 是 , 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素

* 判断栈中是否已经存在当前数组元素,否,将当前数组元素压入栈

[参考]

http://www.cnblogs.com/pk28/p/7421214.html

[代码]

public class Test2 {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
char[] inputCharArray = in.nextLine().toCharArray();
int size = inputCharArray.length;
int[] inputArray = new int[size];

//处理输入数据
for (int i = 0; i < size; i++) {
inputArray[i] = inputCharArray[i] - ‘0‘;
}

Stack numberStack = new Stack();
for (int i = 0; i < size; i++) {
if(numberStack.isEmpty()){
numberStack.push(inputArray[i]);
}else {
int currentNumber = inputArray[i];
int stackTop = (int)numberStack.peek();
if(currentNumber > stackTop){
boolean isExistForward = findIfExistForward(inputArray, stackTop, i + 1, size - 1);
if(isExistForward){
numberStack.pop();
}
}

boolean isExistInStack = findIfExistBackward(numberStack, currentNumber);
if(!isExistInStack){
numberStack.push(currentNumber);
}
}
}

for (int i = 0; i < numberStack.size(); i++) {
System.out.print(numberStack.get(i));
}
}

/**
* 判断inputCharArray数组中,下标从i到(length-1)是否有currentNumber的重复元素
* @param inputCharArray 源数组
* @param currentNumber
* @param i
* @param end
*/
private static boolean findIfExistForward(int[] inputCharArray, int currentNumber, int i, int end) {
while (i <= end){
if(inputCharArray[i] == currentNumber){
return true;
}
i++;
}
return false;
}

/**
* 判断栈中,是否已存在currentNumber元素
* @param numberStack
* @param currentNumber
* @return
*/
private static boolean findIfExistBackward(Stack numberStack, int currentNumber) {
if(numberStack.search(currentNumber) == -1){
return false;
}else {
return true;
}
}
}

[测试用例]

1、输入 : 423234  输出 : 432

2、输入 : 432143214321 输出 : 4321

3、输入 : 42189214 输出 : 42891

 



2017-08-23 华为笔试第二道编程题详解

标签:for   return   nbsp   参考   测试   back   示例   class   sys   

原文地址:http://www.cnblogs.com/zoudongdong/p/7425146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!