当前位置: 首页 > news >正文

算法题--华为od机试考试(组成最大数、第k个排列、最小传输时延)

目录

组成最大数

题目描述

输入描述

输出描述

示例1

输入

输出

示例2

输入

输出

解析

答案

第k个排列

题目描述

输入描述

输出描述

示例1

输入

输出

示例2

输入

输出

解析

答案 

最小传输时延

题目描述

输入描述

输出描述

示例1

输入

输出

解析

答案


组成最大数

考察排序

题目描述

小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来回以组成多种数字。

输入描述

","号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人。

输出描述

最大的数字字符串

示例1

输入

22,221

输出

22221

示例2

输入

22,221,35,351,356

输出

3563535122221

解析

通过逗号分割成若干个数组,高位数字越大的应该越放前面。需要考虑不同个数的数字该如何排序,例如456,43632,这种比较前三位即可出结果456排前面。

例子改为456和456457时应该谁排前面?这里可以通过循环小的位数补齐判断,456456和456457可以得出456457排前面。所以我们可以将所有的位数不够6位的循环补齐6位后再直接排序。

答案

function getMaxNumber(str) {let numArr = str.split(',')numArr = numArr.map(v => ({value: v,sortValue: v.repeat(6).slice(0, 6)}))numArr.sort((a, b) => b.sortValue - a.sortValue)return numArr.map(v => v.value).join('')
}
console.log(getMaxNumber('22,221,35,351,356'))

第k个排列

考察分解问题,排列

题目描述

给定参数n,从1到n会有n个整数:1,2,3,...,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列情况,并一一标记,

当n=3时,所有排列如下:

'123'

'132'

'213'

'231'

'312'

'321'

给定n和k,返回第k个排列

输入描述

输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!]。

输出描述

输出排在第k位置的数字。

示例1

输入

3

3

输出

213

示例2

输入

4

7

输出

2134

解析

分解问题,每次取出第一位数。最后组成结果,例如示例2,所有的排列有1***,2***,3***,4***。以1开头的一共有3!=6个数,即排1~6的都是1***的。

故直接除以6即可得到在哪个区间,余数是剩余几位数的位置。同理依次往下取下一位即可。

答案 

function getPermutation(str) {let arr = str.split('\n')if (arr[0] === '1') {return 1}let num = Number(arr[0])// 剩余数let numArr = new Array(num).fill(0).map((v, i) => i + 1)let index = Number(arr[1])let res = ''while (index) {let tmp = Math.ceil(index / factorial(num - 1)) - 1// 每次取出第一位数res += numArr[tmp]numArr.splice(tmp, 1)// 剩余数的第k个位置index = index % factorial(num - 1)num--}return res + numArr[0]
}
function factorial(n) {if (n === 1) {return 1}return n * factorial(n - 1)
}console.log(getPermutation(`3
3`))
console.log(getPermutation(`4
7`))

最小传输时延

考察深度遍历,递归,hash

题目描述

某通信网络中有N个网络节点,用1到N进行标识。网络通过一个有向无环图表示,其中图的边的值表示节点之间的消息传递时延。现给定相连节点之间

的时延列表times[i]={u,v,w},其中u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延。请计算给定源节点到目的节点的最小传输时延,如果目的

节点不可达,返回-1。注:1.N的取值范围为[1,100];2.时延列表times的长度不超过6000,且1<=u,v<=N,0<=w<=100;

输入描述

输入的第一行为两个正整数,分别表示网络结点的个数N,以及时延列表的长度M,用空格分隔;接下来的M行为两个节点间的

时延列表[u v w];输入的最后一行为两个正整数u和v,分别表示源结点和目的结点;

输出描述

输出一个整数,表示源结点到目的结点的最小时延。

示例1

输入

3 3

1 2 11

2 3 13

1 3 50

1 3

输出

24

解析

1.将能否到达目标节点用key-value的形式表示。通过访问对象的key是否存在判断是否能到达目标节点,其中key为起点-终点,value为时延值。

2.使用深度遍历(递归)来查找是否能到达终点。

我们用f(start,end)表示start到end的最小时延,首先需要找到f(start,end)和下一次的关系。等于start能到的所有节点出发的值中最小的一个加第一次时延的最小值。

即f(start,end)=min(f(start1,end)+start-start1,f(start2,end)+start-start2,f(start3,end)+start-start3....),这里start1,start2,start3,为start能到的节点。

start-start1,表示start到start1节点的时延。

3.找终点。

    1.走过的节点不能再走避免循环(通过set记录走过的节点)。

    2.当前时延超过之前记录的最小时延时不需要继续往下了。

    3.当start的可达节点中有end时不需要往下继续找了。

答案

function getMinTimeDelay(str) {let paramArr = str.split('\n')let [start, end] = paramArr.pop().split(' ')let hash = {}let nodeHash = {}paramArr.forEach(v => {let tmp = v.split(' ')hash[`${tmp[0]}-${tmp[1]}`] = Number(tmp[2])if (!nodeHash[tmp[0]]) {nodeHash[tmp[0]] = {next: [tmp[1]]}} else {nodeHash[tmp[0]].next.push(tmp[1])}})let res = 0let set = new Set(start)let min = findMin(start, end, res, set, nodeHash, hash)if (min) {return min}return -1
}
function findMin(start, end, res, set, nodeHash, hash, min = Infinity) {let next = nodeHash[start].next// 大于已有结果的时延,不再往下继续寻找if (res >= min) {return}let len = next.length// 深度遍历,查找每一条路径的时延for (let i = 0; i < len; i++) {let tmp = next[i]// 找到了终点if (tmp === end) {if (min > res + hash[start + '-' + end]) {min = res + hash[start + '-' + end]}continue}// 下一个结点不能为走过的节点if (!set.has(tmp)) {// 记录走过的节点set.add(tmp)let result = findMin(tmp, end, res + hash[start + '-' + tmp], set, nodeHash, hash, min)if (result < min) {min = result}// 下一次循环前还原走过的节点set.delete(tmp)}}if (min !== Infinity) {return min}return
}
console.log(getMinTimeDelay(`3 3
1 2 11
2 3 13
1 3 50
1 3`))

相关文章:

算法题--华为od机试考试(组成最大数、第k个排列、最小传输时延)

目录 组成最大数 题目描述 输入描述 输出描述 示例1 输入 输出 示例2 输入 输出 解析 答案 第k个排列 题目描述 输入描述 输出描述 示例1 输入 输出 示例2 输入 输出 解析 答案 最小传输时延 题目描述 输入描述 输出描述 示例1 输入 输出 解析…...

2024 年最新本地、云服务器安装部署 miniconda 环境详细教程(更新中)

Anaconda 概述 Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包&#xff0c;涵盖了数据科学领域常见的 Python 库&#xff0c;并且自带了专门用来解决软件环境依赖问题的 conda 包管理系统。主要是提供了包管理与环境管理的功能&#xff0c;可以很方便…...

Python进行excel处理-01

最近干采购&#xff0c;每个月要对供应商的对账单&#xff0c;对对应的采购订单号和物料编号的价格和数量&#xff0c;是不是和物料管控总表里面的价格数量是不是一致&#xff0c;于是写了一个代码。 从总表里面找到&#xff0c;对账单里对应采购订单和物料编码的数据&#xf…...

苹果macOS无法给App麦克风授权解决办法

好久没有在电脑上录制课程了&#xff0c;有些东西还是录下来记忆深刻&#xff0c;却意外发现MAC系统升级后无法授权给第三方的App使用摄像头和麦克风&#xff0c;而录屏软件是需要开启麦克风和摄像头才能录制屏幕上的操作和声音&#xff0c;官方提示在第三方APP若有使用摄像头和…...

图的深度优先遍历

way&#xff1a;栈&#xff0c;map&#xff08;或set&#xff0c;只是我想用map&#xff09;记录是否访问过&#xff0c;放入时记录为已访问&#xff0c;打印&#xff0c;邻接的没访问过先入cur&#xff0c;再入邻接的节点&#xff0c;放入一个邻接的节点后及时break去下一个深…...

13 华三三层链路聚和

13 华三三层链路聚和 AI 解析 华三三层静态路由是指在华三交换机上配置的一种路由方式。它通过在交换机上手动配置路由表&#xff0c;将不同网络之间的数据进行转发。 华三三层静态路由的配置步骤如下&#xff1a; 1. 配置交换机接口的IP地址&#xff1a;在交换机上选择要配…...

C# 下载安装,使用OfficeOpenXml

下载安装OfficeOpenXml模块 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Text.RegularEx…...

Spring整体流程源码分析

DisableEncodeUrlFilter 防止sessionId被泄露 包装器模式 WebAsyncManagerIntegrationFilter WebAsyncManagerIntegrationFilter通常与Spring MVC的异步请求处理机制一起使用&#xff0c;确保在使用Callable或DeferredResult等异步处理方式时&#xff0c;安全上下文能够正…...

使用XxlCrawler抓取全球航空公司ICAO三字码

目录 前言 一、数据源介绍 1、目标网站 2、页面渲染结构 二、XxlCrawler信息获取 1、创建XxlCrawler对象 2、定义PageVo对象 3、直接PageVO解析 4、自定义解析 总结 前言 长距离旅行或者出差&#xff0c;飞机一定是出行的必备方式。对于旅行达人或者出差人员而言&…...

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…...

Optional用法

说明&#xff1a;Optional和Stream一样&#xff0c;是Java8引入的特性&#xff0c;本文介绍Optional的几个实际用法。Steam流使用&#xff0c;参考下面这篇文章&#xff1a; Stream流使用 使用 1.保证值存在 // 1.保证值存在&#xff0c;pageNumber&#xff0c;pageSizeInte…...

【观成科技】加密C2框架Xiebro流量分析

一、工具介绍 Xiebro是由Golang和 .NET编写&#xff0c;提供支持的多人和多服务器 C2/后开发框架。它支持多种通信协议&#xff0c;包括TCP、websocket等&#xff0c;并且在客户端与Xiebro服务器之间的通信通常采用AES加密来保障安全性和隐蔽性。 二、工具原理分析 Xiebro C…...

【八大排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序

文章目录 一、排序的相关概念二、排序类型三、排序算法实现插入排序1.直接插入排序2.希尔排序 选择排序3.简单选择排序4.堆排序 交换排序5.冒泡排序6.快速排序递归实现非递归实现 7.归并排序递归实现非递归实现 8.计数排序 四、总结 一、排序的相关概念 排序&#xff1a;根据数…...

Flutter 中的 CupertinoActionSheet 小部件:全面指南

Flutter 中的 CupertinoActionSheet 小部件&#xff1a;全面指南 在Flutter中&#xff0c;CupertinoActionSheet是用于在iOS风格的应用中显示动作面板的组件。它提供了一个简洁的界面&#xff0c;让用户可以快速从一组选项中做出选择。CupertinoActionSheet通常伴随着一个或多…...

IDEA 好用的插件

图标插件&#xff1a;Atom Material Icons 此插件的作用就是更好的显示各种文件的类别&#xff0c;使之一目了然 汉化包 Chinese ​(Simplified)​ Language Pack / 中文语言包 作用就是 汉化 AI编码助手 GitHub Copilot AI编码助手&#xff1a;提示代码很好用 缺点&#xff1a…...

leetcode——链表的中间节点

876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 链表的中间节点是一个简单的链表OJ。我们要返回中间节点有两种情况&#xff1a;节点数为奇数和节点数是偶数。如果是奇数则直接返回中间节点&#xff0c;如果是偶数则返回第二个中间节点。 这道题的解题思路是&a…...

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代&#xff0c;网络稳定性对于个人和企业都至关重要。然而&#xff0c;由于多种因素的影响&#xff0c;如地理位置、网络拥堵或网络安全问题等&#xff0c;网络稳定性常常受到挑战。为了应对这些挑战&#xff0c;静态住宅代理作为一种高效且可靠的网络解决方案&#…...

VACode 创建Vue项目完整过程

一、软件下载 VSCode官网下载地址&#xff1a;https://code.visualstudio.com/ 二、下载开发环境 1. 安装 [Node.js](https://nodejs.org/)&#xff1b; 2. 安装 [npm](https://www.npmjs.com/) 依赖管理工具&#xff1b; 注&#xff1a;node.js安装完后会同步安装npm,一般…...

【C++】详解C++的模板

目录 概念 ​编辑 语法 函数模板 类模板 非类型模板参数 模板的特化 函数模板特化 类模板特化 全特化 偏特化 分离编译 概念 模板是C中非常厉害的设计&#xff0c;模板把通用的逻辑剥离出来&#xff0c;让不同的数据类型可以复用同一种模板的逻辑&#xff0c;甚至可以…...

1146 -Table ‘performance schema.session variables‘ doesn‘t exist的错误解决

一、问题出现 今天在本地连数据库的时候&#xff0c;发现这个问题&#xff0c;哎呦我擦&#xff0c;差点吓死了 二、解决办法 1&#xff09;找文件 用everything搜一下MySQL Server 5.7 然后去Windows服务找一下MySQL配置文件的具体路径 如果知道那最好&#xff0c;不知道那…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...