算法题--华为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] * mrreturn 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**0a = a.split('').reverse().reduce((t, v, i) => t = t + (v.charCodeAt() - 96) * 100 ** i, 0)b = b.split('').reverse().reduce((t, v, i) => t = t + (v.charCodeAt() - 96) * 100 ** i, 0)return a - b
}
console.log(sortTopProj(`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`))

 

API集群负载统计

考察数组操作

题目描述

某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,

根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。

RESTful API是由多个层级构成,层级之间使用 / 连接,如 /A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。

现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用0表示,实现这个功能。

输入描述

第一行为N,表示访问历史日志的条数,0 < N ≤ 100。

接下来N行,每一行为一个RESTful API的URL地址,约束地址中仅包含英文字母和连接符 / ,最大层级为10,每层级字符串最大长度为10。

最后一行为层级L和要查询的关键字。

输出描述

输出给定层级上,关键字出现的频次,使用完全匹配方式(大小写敏感)。

示例1

输入

5

/com/cheese/no/pop

/lai/cheese

/apple

/cat/cloud/no/one

/la/apple/no/hot

2 cheese

输出

2

解析

通过/分割每个url地址,取出每一个的目标层级位,进行判断是否和关键字相等。

答案

function getWordNum(str) {let arr = str.split('\n')arr.shift()let [n, word] = arr.pop().split(' ')arr = arr.map(v => v.split('/'))let sum = 0arr.forEach(v => {if (v?.[n] === word) {sum++}})return sum
}
console.log(getWordNum(`5
/com/cheese/no/pop
/lai/cheese
/apple
/cat/cloud/no/one
/la/apple/no/hot
2 cheese`))

分月饼

考察深度遍历、递归。

题目描述

中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,单人分到最多月饼的个数是Max1,

单人分到第二多月饼个数是Max2,Max1-Max2 <= 3,单人分到第n-1多月饼个数是Max(n-1),

单人分到第n多月饼个数是Max(n),Max(n-1) – Max(n) <= 3, 问有多少种分月饼的方法?

输入描述

每一行输入m n,表示m个员工,n个月饼,m<=n

输出描述

输出有多少种月饼分法

示例1

输入

2 4

输出

2

说明

分法有2种

4=1+3

4=2+2

注意:1+3和3+1算一种分法

示例2

输入

3 5

输出

2

说明

5=1+1+3

5=1+2+2

示例3

输入

3 12

输出

6

说明

满足要求的有6种分法:

12=1+1+10(Max1=10,Max2=1,不满足要求)

12=1+2+9(Max1=9, Max2=2, 不满足要求)

12=1+3+8(Max1=8, Max2=3, 不满足要求)

12=1+4+7(Max1=7, Max2=4, Max3=1,满足要求)

12=1+5+6(Max1=6, Max2=5, Max3=1,不满足要求)

12=2+2+8(Max1=8, Max2=2, 不满足要求)

12=2+3+7(Max1=7, Max2=3, 不满足要求)

12=2+4+6(Max1=6, Max2=4, Max3=2, 满足要求)

12=2+5+5(Max1=5, Max2=2,满足要求)

12=3+3+6(Max1=6, Max2=3, 满足要求)

12=3+4+5(Max1=5, Max2=4, Max3=3,满足要求)

12=4+4+4(Max1=4, 满足要求)

解析

首先我们需要从第一个员工开始分配,由于示例1中1+3和3+1算一种分法,所以我们可以假设从序号0到序号m-1个员工拿到的月饼为一个递增的序列。

然后相邻的每个员工有一个限制条件,拿到月饼的范围,故可以得出函数的参数f(index,sum,down,up)表示序号为index的员工,sum为剩余的月饼数,

down和up表示当前员工可以拿月饼的范围。

找到f(index,sum,down,up)=f(index+1,sum-i,i,Math.min(i+3,sum-i)),其中i从down到up循环,表示为index员工拿到的月饼数。

找终点。

    1.当index和m相等时,表示已经分配完了所有元,如果不剩月饼,此时应该把符合条件的分法加一。

    2. 剩余的月饼不足以分配||无剩余月饼||月饼的下限大于上限

答案

function getDispatchWay(m, n) {let res = 0; dfs(0, n, 1, n);  // u表示当前员工的索引,sum表示剩余的月饼数,down和up表示当前员工分到的月饼数量的下限和上线function dfs(index, sum, down, up) {  if (index === m) {  // 如果u等于mif (sum === 0) {  // 如果sum等于0res++;  // 结果加一}return;  }// 剩余的月饼不足以分配||无剩余月饼||月饼的下限大于上限if (down > sum || sum < 0 || down > up) { return;  }// 当前序号的员工发放了i个月饼for (let i = down; i <= up; i++) {  // 下一个员工分到月饼的上限不能大于剩余的月饼数或当前员工的月饼数量+3取最小值dfs(index + 1, sum - i, i, Math.min(sum - i, i + 3));  }}return res
}
console.log(getDispatchWay(2, 4))
console.log(getDispatchWay(3, 5))
console.log(getDispatchWay(3, 12))

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

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

相关文章

Python 操作Redis

本篇介绍在Python中如何使用Redis。 目录 安装类库 引入类库 操作读写 使用pipeline 封装 封装redis 操作 调用 总结 安装类库 首先通过pip list命令查看&#xff0c; 本地安装类库中是否有redis类库&#xff0c; 如果没有开始安装。 安装命令如下&#xff1a; pip…

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH) 一、最大通话时间 1、配置拨号方案 1、点击拨号方案 ->2、在框中输入通话最大时长->3、点击添加->4、根据图中配置->5、勾选continue。修改拨号方案需要等待一分钟即可生效 action"sched…

(简单)html转图片-html2canvas

官方文档 https://html2canvas.hertzen.com/ 案例代码 自己创建一个html然后试一下 <!DOCTYPE html> <html> <head><title>HTML to Image Example</title><script src"https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.3.2/ht…

9M高速USB转接芯片CH347转双串口转I2C转SPI转JTAG转SWD

1、概述 CH347 TSSOP20封装和丝印 CH347 是一款高速 USB 总线转接芯片&#xff0c;通过 USB 总线提供异步串口、I2C 同步串行接口、SPI 同步串行接口和 JTAG 接口等。 在异步串口方式下&#xff0c;CH347 提供了 2 个高速串口&#xff0c;支持 RS485 串口收发使能控制、硬件流控…

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决&#xff0c;只需要2次遍历字符串&#xff0c;第一次遍历字符串&#xff0c;记录每个字符出现的次数&#xff0c;第二次返回第一个出现次数为1的字符的下标&#xff0c;若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

Python自动化办公(一) —— 根据PDF文件批量创建Word文档

Python自动化办公&#xff08;一&#xff09; —— 根据PDF文件批量创建Word文档 在日常办公中&#xff0c;我们经常需要根据现有的PDF文件批量创建Word文档。手动操作不仅费时费力&#xff0c;而且容易出错。幸运的是&#xff0c;使用Python可以轻松实现这个过程。本文将介绍如…

Python 学习 第二册 第11章 文件

----用教授的方式学习 目录 11.1 打开文件 11.2 文件的基本方法 11.2.1 读取和写入 11.2.2 使用管道重定向输出 11.2.3 读取和写入行 11.2.4 关闭文件 11.3 迭代文件内容 11.3.1 每次一个字符&#xff08;或字节&#xff09; 11.3.2 每次一行 11.3.3 读取所有内容 …

make menuconfig | allyesconfig | allnoconfig【笔记】

make menuconfig, make allyesconfig, 和 make allnoconfig 是在编译Linux内核或某些其他使用类似配置系统的开源项目时使用的命令。这些命令用于生成内核配置文件&#xff0c;该文件决定了内核编译时哪些功能会被包含或排除。 下面是这三个命令的简要说明&#xff1a; 1、ma…

linux的repo工具的入门

repo 是一个工具&#xff0c;用于管理 Git 仓库的集合&#xff0c;尤其在 Android 开发中被广泛使用。它是 Google 为 Android 项目开发的&#xff0c;以简化对大量 Git 仓库的管理。 主要特点 多仓库管理&#xff1a;repo 允许同时管理多个 Git 仓库&#xff0c;可以轻松执行…

MyBatis 的多级缓存机制是怎么样运作的?

引言&#xff1a;上周三&#xff0c;小 X 去面试一家中厂&#xff0c;其中面试官问到 MyBatis 的多级缓存机制是怎么样运行的&#xff1f;这个问题可以好好准备一下&#xff0c;很多人可能只会用 MyBatisPlus&#xff0c;简单的多表联查 SQL 语句可能都写不出来&#xff0c;更别…

数据库面试

1. 简单介绍一下Spring中的事务管理。 答&#xff1a;事务就是对一系列的数据库操作&#xff08;比如将insert&#xff0c;delete&#xff0c;update&#xff0c;select多条sql语句&#xff09;作为一个整体执行&#xff0c;进行统一的提交或回滚操作&#xff0c;如果这组sql语…

Python 项目应该放弃requirements.txt?揭秘PDM的强大功能

目录 requirements.txt的局限性 PDM 的优势 如何使用 PDM 安装 PDM 初始化项目 添加依赖 管理依赖 示例代码 初始化项目并添加依赖 编写简单的 Flask 应用 运行应用 PDM高级功能 多环境管理 脚本管理 发布包 在 Python 项目中管理依赖项&#xff0c;最常见的方式…

Android APP memory统计方法

目录 进程的内存信息概述 关键的术语 测试步骤 测试步骤 数据处理 数据分析&#xff1a; 进程内存信息 Dumpsys meminfo -a PID Procrank Procmem PID 特殊内存信息 Mali ION(multi-media&#xff0c;gralloc) 进程地址空间信息 /proc/pid/smaps Showmap PID …

PHP包含:理解、使用和注意事项

PHP是一种流行的脚本语言&#xff0c;广泛应用于Web开发。在PHP中&#xff0c;包含&#xff08;include&#xff09;是一种重要的功能&#xff0c;它允许开发者将一个文件的内容嵌入到另一个文件中。通过包含&#xff0c;可以实现代码的复用和模块化&#xff0c;提高开发效率和…

今日的英语行程安排和学习

让我想一想&#xff0c;现在开始复盘自己要开始做的事情: (01)解决自己的问题 (a).中文的语言结构和英文的语言结构有什么不同? (b).为什么恐惧心理会没办法能够让你好好学习? (c).为什么上课的时候会走神? (b).自己听完了一节课&#xff0c;感觉自己获取的知识十分有限…

如何解决 BeautifulSoup 安装问题:从 BeautifulSoup 3 到 BeautifulSoup 4

在使用 Python 的过程中&#xff0c;解析 HTML 和 XML 数据是一项常见任务。BeautifulSoup 是一个非常流行的解析库。然而&#xff0c;最近在安装 BeautifulSoup 时&#xff0c;遇到了一些问题。本文将介绍如何解决这些问题&#xff0c;并成功安装 BeautifulSoup 4。 问题描述 …

随笔-来了,安了

依照领导定的规矩&#xff0c;周五又去了分公司&#xff0c;赋能一线去了。到了地方就是开会->现场解决问题->干饭->开会过需求、提供解决方案&#xff0c;充实得厉害。强度也不小&#xff0c;中午干的一大碗饭&#xff0c;到五点就饿了。 六点带着分公司催着上线的需…

5000天后的世界

为何可以预见未来 1993年&#xff0c;在互联网的黎明时代&#xff0c;凯文凯利创办了《连线》杂志。他曾经采访过以比尔盖茨、史蒂夫乔布斯、杰夫贝佐斯为代表的一众风云创业家。《连线》杂志是全球发行的世界著名杂志&#xff0c;一直致力于报道科学技术带来的经济、社会变革…

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法&#xff0c;它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特&#xff0c;强大&#xff0c;而且使用更为方便&#xff0c;目前检测少&#xff0c;强烈推荐&#xff01;&#xff01;&a…

Google Earth Engine(GEE)——计算闪闪红星的ndvi的值和折线图(时序分析)

函数: ui.Chart.image.doySeries(imageCollection, region, regionReducer, scale, yearReducer, startDay, endDay)