首页 > 其他分享 >分奖金

分奖金

时间:2023-08-01 22:01:40浏览次数:20  
标签:数字 int 员工 queue 奖金 local

题目描述

公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。 按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列。 遇到第一个数字比自己数字大的,那么,前面的员工就可以获得分奖金_随机数的奖金 如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。

  • 例如,按照工号顺序的随机数字是: 2, 10, 3
  • 分奖金_System_02个员工的数字分奖金_System_03比第分奖金_随机数_04个员工的数字分奖金_System_02大,所以,第分奖金_随机数_04个员工可以获得的奖金是分奖金_java_07
  • 分奖金_System_02个员工后面没有比他数字更大的员工,所以,他获得他分配“随机数字”所代表数量的奖金,就是10
  • 分奖金_java_09个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是分奖金_java_09(因为其获取的随机数是3).
  • 请帮老板计算一下每位员工最终分到的奖金都是多少钱。

输入描述

  • 第一行分奖金_System_11代表员工数量(包含最后一个老板)
  • 第二行是每一位员工被分配到的随机数字

输出描述

  • 最终每一位员工分到的奖金数量

备注:随机数字不重复,员工数量(包含老板)范围是[1, 10000],随机数范围是[1, 100 000]

用例

--输入
3
2 10 3

--输出
8 10 3

题目解析

  • 对于每一个员工而言,其所能获得的奖金仅仅和其后面的员工相关。
  • 那么可以从最后一个员工开始计算。对于当前的员工而言,要找到后面有没有比他数字更大的员工。那么可以用一个变量维护一个其后面员工所抽到的随机数字的最大值。
  • 然后用一个队列维护出现的数据
  • ex:[9, 4, 5, 6, 8]
  • 遍历数字 8 ,最大值是 8,队列 为 [8]
  • 遍历到数字 6,最大值 8,队列为 [6, 8]
  • 为什么 6 能入队,因为对于当前数字而言,要找第一个比 自己数字大的,所以,对于 数字5 而言,那么 数字6 是第一个比其大的数字
  • 同理,遍历到数字 5,最大值 8,队列为 [5, 6, 8]
  • 同理,遍历到数字 4,最大值 8,队列位 [4, 5, 6, 8]
  • 遍历到数字 9,那么最大值是 9了,清空队列 [9]
  • 为什么要清空,因为对于后续的数字,仅仅需要考虑数字 9 即可,因为其是最大的。

show code

package com.hw;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * desc :     <a href="https://fcqian.blog.csdn.net/article/details/128385677">分奖金</a>
 * <p>
 * create time : 2023/7/22 20:47
 */
public class BonusMaster {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] bonus = new int[n];
        for (int i = 0; i < n; i++) {
            bonus[i] = in.nextInt();
        }

        bonusMaster(bonus, n);
    }


    private static void bonusMaster(int[] bonus, int n) {
        // 记录每一个员工分到的奖金数额
        int[] ans = new int[n];
        // 记录一个当前出现的最大随机数
        int maxNum = 0;

        // 队列保存出现过的数字,第一个元素保存 随机数,第二个元素保存对应的索引下标
        PriorityQueue<Integer[]> queue = new PriorityQueue<>(Comparator.comparingInt(a -> a[0]));

        // 倒着遍历
        for (int i = n - 1; i >= 0; i--) {
            // 拿到当前员工所代表的随机数, i 是当前员工所代表的下标
            int local = bonus[i];

            // 开始判断,其后面有没有比它本身大的 随机数
            if(local < maxNum) {
                //  如果有的话,从队列中.
                while(!queue.isEmpty()) {
                    Integer[] peek = queue.peek();
                    if(peek[0] > local) {
                        //  找到了第一个比其大的数字,直接计算
                        ans[i] = (peek[1] - i) * (peek[0] - local);
                        //  当前元素入队
                        queue.offer(new Integer[]{local, i});
                        break;
                    } else {
                        queue.poll();
                    }
                }
            } else {
                // 如果没有的话,随机数作为奖金数量.
                ans[i] = local;
                // 当前元素入队列,并清空队列
                queue.clear();
                // 0:随机数值, i:对应数组下标.
                queue.offer(new Integer[]{local, i});
                // 更新最大值
                maxNum = local;
            }
        }

        for (int an : ans) {
            System.out.print(an);
            System.out.print(" ");
        }
    }

}

标签:数字,int,员工,queue,奖金,local
From: https://blog.51cto.com/u_16079703/6929026

相关文章

  • 【Python 随练】企业奖金计算器
    题目:企业发放的奖金根据利润提成。利润:低于或等于10万元时,奖金可提10%;高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时,高于40万元的部分,可提成3%;60万到100万之间......
  • 2023 开源之夏来啦!报名 MegEngine 项目,赢取万元奖金!
    “开源软件供应链点亮计划-暑期2023”是一项面向高校学生的暑期活动,为高校学生提供了绝佳的、友好开放的交流平台。使学生可以真正投身于开源软件的开发维护,得到资深开源软件开发者指导的机会,获得丰硕的活动奖金,并帮助学生获取优秀企业的关注。活动流程同学们在6月4日之前在......
  • Apache DolphinScheduler 开源之夏学生项目申请开启,6 大课题等你来拿万元奖金!
    开源之夏2023学生报名已经正式开启!ApacheDolphinScheduler今年继续参与开源之夏的活动,2023年4月29日-6月3日15:00UTC+8,同学们可以在开源之夏官网https://summer-ospp.ac.cn/找到ApacheDolphinScheduler下的项目,挑选自己感兴趣的课题,通过项目相对应导师联系方......
  • 拼接最大数(栈、贪心)、发奖金问题、二叉搜索树迭代器(栈、树)
    拼接最大数(栈、贪心)给定长度分别为m和n的两个数组,其元素由0-9构成,表示两个自然数各位上的数字。现在从这两个数组中选出k(k<=m+n)个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大......
  • 200万奖金广聚天下算法英雄,第二届广州·琶洲算法大赛要来了!
    随着深度学习不断驱动技术创新,人工智能加速与实体经济深度融合发展。作为中国首个自主研发、开源开放的产业级深度学习平台,飞桨与百度自研的产业级知识增强文心大模型,共同构筑了产业智能化基座,并联合产学研用各方生态力量,推动AI大规模应用,助力千行百业加快智能化升级。人工智能引......
  • ChatGPT安全:OpenAI的漏洞赏金计划提供高达2万美元的奖金
    广受欢迎的ChatGPTAI聊天机器人背后的公司OpenAI推出了一项漏洞赏金计划,以确保其系统“安全可靠”。为此,该公司与众包安全平台Bugcrowd合作,让独立研究人员报告其产品中发现的漏洞,以换取“低严重程度发现200美元,特殊发现最高2万美元”的奖励。值得注意的是,该程序不包括模型安全或幻......
  • TZOJ 5795: 奖金 拓扑排序
    描述  由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,YaliCompany总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们......
  • C语言:奖金 提成
    //题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40......
  • 拓扑排序 信息奥赛一本通 1352:【例4-13】奖金
    1352:【例4-13】奖金时间限制:1000ms      内存限制:65536KB提交数:607   通过数:223 【题目描述】由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Y......
  • C语言员工销售统计及奖金发放系统[2023-01-09]
    C语言员工销售统计及奖金发放系统[2023-01-09]课题3:员工销售统计及奖金发放系统程序设计功能及要求:(1)总人数不定,开始先输入员工的人数及工号进行初始化,数据使用文......