快捷搜索: 王者荣耀 脱发

华为OD笔试202010OD笔试华为OD第三题入栈操作

华为OD笔试202010OD笔试华为OD第三题入栈操作

输入
5 10 20 50 85 1
输出
1 170

输入
6 7 8 13 9
输出
9 13 8 7 6

解释

输入入栈
6 1 2 3 5
按顺序入栈
6
1
2
3 = 2 + 1
然后把 2 1 出栈,再把2*3=6入栈,此时
6=6
把6 6 出栈,再把2*6=12入栈,
5

输出:
5 12
import java.util.Scanner;
public class Main{
          
   
    public static void main(String[] args) {
          
   
        Scanner sc = new Scanner(System.in);
        int len = 0;
        String[] split = sc.nextLine().split(" ");
        int[] nums = new int[split.length];
        for (int i = 0; i < split.length; i++) {
          
   
            int num = Integer.parseInt(split[i]);
            nums[len] = num;
            len = pushStack(nums, len);
        }
        for (int i = len - 1; i >= 0; i--) {
          
   
            System.out.print(nums[i] + " ");
        }
    }

    private static int pushStack(int[] nums, int len) {
          
   
        int tmpNum = nums[len];
        int tmpLen = len - 1;
        while (tmpNum > 0 && tmpLen >= 0) {
          
   
            tmpNum = tmpNum - nums[tmpLen];
            if (0 == tmpNum) {
          
   
                // 2*num
                nums[tmpLen] = 2 * nums[len];
                len = tmpLen;
                int i = pushStack(nums, len);
                return i;
            }
            tmpLen--;
        }
        len++;
        return len;
    }
}
经验分享 程序员 微信小程序 职场和发展