算法题--华为od机试考试(开源项目热度榜单、API集群负载统计、分月饼)

目录

开源项目热度榜单

题目描述

输入描述

输出描述

示例1

输入

输出

解析

答案

API集群负载统计

题目描述

输入描述

输出描述

示例1

输入

输出

解析

答案

分月饼

题目描述

输入描述

输出描述

示例1

输入

输出

说明

示例2

输入

输出

说明

示例3

输入

输出

说明

解析

答案


开源项目热度榜单

考察排序

题目描述

某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者对于每个开源项目,开发者可以进行关注 (watch) 、收藏(star) 、fork、提issue、提交合并请求 (MR)等。

数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热度根据这5个维度的加权求和进行排序。

H = W(watch) x #watch + W(star) x #star + W(fork) x #fork + W(issue) x #issue + W(mr) x #mr

H 表示热度值 W(watch)、W(star)、W(fork)、W(issue)、W(mr) 分别表示5个统计维度的权重。#watch、#star、#fork、#issue、#mr 分别表示5个统计维度的统计值.

榜单按照热度值降序排序,对于热度值相等的,按照项目名字转换为全小写字母后的字典序排序(a,b,c...x,y,z)。

输入描述

第一行输入为N,表示开源项目的个数,0 < N <100。

第二行输入为权重值列表,一共 5 个整型值,分别对应关注、收藏、fork、issue、MR的权重,权重取值 0< W<= 50。

第三行开始接下来的N行为开源项目的统计维度,每一行的格式为: name nr_watch nr_start nr_fork nr_issue nr_mr。其中name为开源项目的名字,由英文字。

输出描述

排序后的项目名字。

示例1

输入

4

8 6 2 8 6

camila 66 70 46 158 80

victoria 94 76 86 189 211

anthony 29 17 83 21 48

emily 53 97 1 19 218

输出

victoria camila emily anthony

解析

先让每个项目通过字母排序,然后再通过热度值排序即可。

字母排序可以通过将比较的两个单词补全到相同长度,然后将每一位对应的权重设置为>24,然后计算单词对应的数值进行相减即可。这样可以避免每一位依次比较。

答案

function sortTopProj(str) {
    let arr = str.split('\n')
    arr.shift()
    let [watch, star, fork, issue, mr] = arr.shift().split(' ').map(Number)
    arr = arr.map(v => {
        v = v.split(' ')
        let res = {}
        res.value = v.shift()
        res.num = v[0] * watch + v[1] * star + v[2] * fork + v[3] * issue + v[4] * mr
        return res
    })
    arr.sort(compareWord)
    arr.sort((a, b) => b.num - a.num)
    return arr.map(v => v.value).join(' ')
}
function compareWord({ value: a }, { value: b }) {
    let len = Math.max(a.length, b.length)
    a = a.padEnd(len, 'a')
    b = b.padEnd(len, 'a')
    // 将每一位对应的权重设置为100,然后计算补全后的单词对应的数值,例如abc=》1*100**2+2*100**1+3*100**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值