华为OD机考算法题:分奖金

题目部分

题目分奖金
难度
题目说明公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得 距离 * 数字差值 的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。例如,按照工号顺序的随机数字是: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
说明


解读与分析

题目解读

此题可翻译成:有一个整形数组,设为 arr,其长度为 n,数组个元素已经初始化为指定的值。对于数组中第 i (0 ≤ i < n)个元素,如果:
1. 在第 ( i + 1 ) 到 n 个元素中存在比 arr[i] 大的元素,如果这样的元素有多个,假设下标最小的元素其下标为 j,那么 arr[i] 的值修改为 ( arr[j] - arr[i] ) * ( j - i)。
2.  
在第 ( i + 1 ) 到 n 个元素中存在比 arr[i] 大的元素,那么 arr[i] 的值保持不变。
最后,输出数组 arr 的内容。

分析与思路

我们可以直接从第 0 个元素开始往后遍历,计算每个元素的值。以为每个元素的值只后排在它后面的元素有关,所以一定要从第 0 个元素开始遍历,而不能从最后一个元素 n - 1 开始遍历。

此方法的时间复杂度 o({n}^2),空间复杂度为 o(1)。


代码实现

Java代码

import java.util.Scanner;/*** 分奖金* @since 2023.09.11* @version 0.1* @author Frank**/
public class BonusDistribution {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();int count = Integer.parseInt( input );input = sc.nextLine();String[] numbers = input.split( " " );// 此处 count == numbers.count,可以完全不用考虑 count.processBonusDistribution( numbers );}}private static void processBonusDistribution( String numbers[] ){int[] arr = arrString2Int( numbers );for( int i = 0; i < arr.length; i ++ ){for( int j = i + 1; j < arr.length; j ++ ){if( arr[j] > arr[i] ){arr[i] = ( arr[j] - arr[i] ) * ( j - i );break;}}}StringBuffer sb = new StringBuffer();for( int i = 0; i < arr.length; i ++ ){if( i != arr.length - 1 ){sb.append( arr[i] + " " );}else{sb.append( arr[i] );}}System.out.println( sb.toString() );}private static int[] arrString2Int( String numbers[] ){int ret[] = new int[numbers.length];for( int i = 0; i < numbers.length; i ++ ){ret[i] = Integer.parseInt( numbers[i] );}return ret;}}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {// count 可以忽略var count = parseInt(line);line = await readline();var numberArr = line.split(" ");processBonusDistribution(numberArr);}
}();function processBonusDistribution(numberArr) {var arr = arrString2Int( numberArr );for( var i = 0; i < arr.length; i ++ ){for( var j = i + 1; j < arr.length; j ++ ){if( arr[j] > arr[i] ){arr[i] = ( arr[j] - arr[i] ) * ( j - i );break;}}}console.log( arr.join(" "));
}function arrString2Int( numberArr )
{var ret = [];for( var i = 0; i < numberArr.length; i ++){ret.push( parseInt( numberArr[i] ) );}return ret;
}

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户需求调研的三个实用工具

在竞争激烈的市场中&#xff0c;了解客户的需求并满足他们的期望对于企业的成功至关重要。因此&#xff0c;进行客户需求调研是一项关键性工作&#xff0c;可以帮助企业更好地理解客户的需求、偏好和行为。为了更有效地进行客户需求调研&#xff0c;以下是三个实用工具&#xf…

案例实战-Spring boot Web

准备工作 需求&环境搭建 需求&#xff1a; 部门管理&#xff1a; 查询部门列表 删除部门 新增部门 修改部门 员工管理 查询员工列表&#xff08;分页、条件&#xff09; 删除员工 新增员工 修改员工 环境搭建 准备数据库表&#xff08;dept、emp&#xff09; -- 部门管理…

【linux基础(五)】Linux中的开发工具(上)---yum和vim

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux中的开发工具 1. 前言2.…

批量采集的时间管理与优化

在进行大规模数据采集时&#xff0c;如何合理安排和管理爬取任务的时间成为了每个专业程序员需要面对的挑战。本文将分享一些关于批量采集中时间管理和优化方面的实用技巧&#xff0c;帮助你提升爬虫工作效率。 1. 制定明确目标并设置合适频率 首先要明确自己所需获取数据的范…

2020年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;字符三角形 描述 给定一个字符&#xff0c;用它构造一个底边长5个字符&#xff0c;高3个字符的等腰字符三角形。 输入 输入只有一行&#xff0c; 包含一个字符。 输出 该字符构成的等腰三角形&#xff…

人工智能AI 全栈体系(二)

第一章 神经网络是如何实现的 上节描述的网络结构比较特殊&#xff0c;不具有一般性。比如前面我们讲过的权重都是1或者-1&#xff0c;这是很特殊的情况&#xff0c;实际上权重可以是任何数值&#xff0c;可以是正的&#xff0c;也可以是负的&#xff0c;也可以是带小数的。权…

2023-简单点-怎么知道树莓派是什么cpu架构?

树莓派是几位&#xff1f; getconf LONG_BIT https://qengineering.eu/install-ncnn-on-raspberry-pi-4.html

基于大规模MIMO通信系统的半盲信道估计算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %EM算法收敛所需的迭代 nIter 1; Yp Y(:,1:L_polit,:); %与导频序列相对应的部分 q…

激活函数总结(三十一):激活函数补充(ELiSH、Hard ELiSH)

激活函数总结&#xff08;三十一&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 ELiSH激活函数2.2 Hard ELiSH激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Softmax…

OpenCV(三十六):霍夫直线检测

1.检测直线的霍夫变换原理 2.检测直线函数HoughLines() 检测直线流程: Step1:将参数空间的坐标轴离散化。 Step2:将图像中每个非0像素通过映射关系求取在参数空间通过的方格 Step3:统计参数空间内每个方格出现的次数&#xff0c;选取次数大于某一值的方格作为表示直线的方格…

正中优配:股票出现xd是好还是坏?

近年来&#xff0c;股票市场的日渐成熟和开展使得出资者们关于股票价格的涨跌也愈加灵敏&#xff0c;特别是股票呈现XD之后&#xff0c;更是引起了一系列热议。那么&#xff0c;股票呈现XD是好还是坏&#xff1f;本文将从多个角度进行剖析。 首要&#xff0c;需要清晰XD的定义…

LabVIEW更改Tab所选标签的颜色

LabVIEW更改Tab所选标签的颜色 在开发过程中&#xff0c;有时会出现要将不同tab页设置不同颜色的情况。此VI允许编程方式更改前面板选项卡控件上选项卡的颜色。它是突出显示所选选项卡的理想选择 在某些应用程序中&#xff0c;用户希望在按下时突出显示选项卡控件。此VI使用事…