华为OD机试-分奖金-2022Q4 A卷-Py/Java/JS

公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得“距离*数字差值”的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。例如,按照工号顺序的随机数字是: 2,10.3。那么第2个员工的数字10比第1个员工的数字2大,所以,第1个员工可以获得1*(10-2) =8。第2个员工后面没有比他数字更大的员工,所以,他获得他分配的随机数数量的奖金,就是10。第3个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是3。
请帮老板计算一下每位员工最终分到的奖金都是多少钱

输入描述:
第一行n表示员工数量 (包含最后一个老板)
第二是每位员工分配的随机数字
例如
3
2 10 3
输出描述:
最终每位员工分到的奖金数量
例如
8 10 3
补充说明:
随机数字不重复,员工数量(包含老板)范围1~10000,随机数范围1~100000

示例1
输入:
3
2 10 3
输出:
8 10 3

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
 
class Main {
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
 
        int[] nums = new int[N];
        for(int i=0; i st = new Stack();
        int res[]=new int[len];
        int i=0;
        while(i

Python代码

import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
 
def monoStack( nums):
    n = len(nums)
    res = [-1] * n
    stack = list()
    for i in range(n):
        while stack and nums[stack[-1]] < nums[i]:
            res[stack[-1]] = (nums[i] - nums[stack[-1]]) * (i - stack[-1])
            stack.pop()
        stack.append(i)
    return res
 
 
#处理输入
N = int(input())
nums = [int(x) for x in input().split(" ")]
 
res = monoStack(nums)
for i in range(len(res)):
    if res[i] == -1:
        res[i] = nums[i]
print(res)

JS代码

 
function monoStack(nums) {
    let n = nums.length
    let res = new Array(n).fill(-1)
    let stack = []
    for (let i=0;i0 && nums[stack[stack.length-1]] < nums[i]) {
            res[stack[stack.length-1]] = (nums[i] - nums[stack[stack.length-1]]) * (i - stack[stack.length-1])
            stack.pop()
        }
        stack.push(i)
    }
    return res
}
 
function main(nums) {
    let res = monoStack(nums)
    for (let i=0;i

你可能感兴趣的:(华为,javascript,java,python)