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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-08-23 华为笔试第二道编程题详解相关的知识,希望对你有一定的参考价值。

[题目描述] 

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

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

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

[示例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 华为笔试第二道编程题详解的主要内容,如果未能解决你的问题,请参考以下文章

2016携程测试实习生笔试编程题

华为2020校招笔试编程题

华为牛客网机试都是编程么

美图笔试算法题(两个人拿石头判断输赢)

华为od有不是编程题的笔试吗

华为2018软件岗笔试题解题思路和源代码分享