算法题--华为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 = 0
    let 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`))

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
名词介绍 根据ICT从业者的学习和进阶需求,华为认证分为工程师级别、高级工程师级别和专家级别三个认证等级。 [1] HCIA:Huawei Certified ICT Associate 华为认证ICT工程师 是华为职业认证中用于标识个人能力在某一技术领域达到工程师级别的证明,表示通过认证的人员具备安装、配置、运行 ICT 设备,并进行故障排除的能力。 HCIP:Huawei Certified ICT Professional 华为认证ICT高级工程师 是华为职业认证中用于标识个人能力在某一技术领域达到高级工程师级别的证明,表示通过认证的人员具有丰富的 ICT 知识和实践能力。 HCIE:Huawei Certified ICT Expert 华为认证ICT专家 是华为认证体系中最高级别的 ICT 技术认证,表示通过认证的人具有 ICT 领域专业知识和丰富实践经验。 [2] 1、路由交换领域认证项目 1)HCIA-Routing& Switching认证 培训和认证具备中小型企业网络部署和运维能力的工程师。 通过认证验证的能力:掌握中小型网络的特点和通用技术,具备使用华为路由交换设备协助进行中小型企业网络设计、实施和运维的基础能力,实现企业网络的互联。 建议掌握的知识:网络基础知识,网络的基本连接方法,网络架构基础,网络故障排除基础,华为路由交换设备的安装和调。 [3] 2)HCIP-Routing& Switching认证 培训和认证在数据通信领域具备独立进行中小型网络规划设计、部署和运维的能力的高级工程师。 通过认证验证的能力:全面掌握中小型网络的特点和更深入的技术应用,具备使用华为路由交换设备独立进行中小型企业网络规划设计、部署和运维的能力,实现网络的较高安全性、可用性和可靠性。 建议掌握的知识:全面和深入的网络知识,交换和路由器高级应用,TCP/IP协议簇,路由协议,访问控制,eSight、Agile Controller产品介绍,SDN、VXLAN、NFV的基本知识,PDIOI等。 [4] 3)HCIE-Routing& Switching认证 培训与认证在数据通信领域具备大中型复杂网络规划设计、部署、运维及优化能力的网络技术专家。 通过认证验证的能力:掌握大中型复杂网络特点和技术发展趋势,具备基于大中型企业应用独立规划设计、部署、运维和优化的能力,实现网络的高扩展、高安全和高效,支撑企业所需的语音、无线、云和存储等应用的全面集成。 建议掌握的知识:不同设备和网络之间复杂连接问的解决方法(高级路由协议),使用技术解决方案提高带宽、缩短、最大限度提高性能,加强安全性和支持全球应用,复杂网络的故障排除。 [5] 考试流程 华为认证考试由Pearson VUE考试服务公司代理。华为认证不同级别与方向的认证考试项目具有不同的考试要求与流程。 [6] 要获得HCIA、HCIP、HCIE等华为认证,需参加并通过一门或多门与认证项目对应的考试。 华为认证的理论考试由全球权威的专业认证考试服务构Pearson VUE代理,在规定的间、保密的环境中进行。 [6] 认证考试型为单选、多选和判断,答必须按顺序进行,选择下一后将不能回到已经做过的做修改。 [7] 考试概况 认证考试是华为认证项目的组成部分,Pearson VUE作为华为认证笔考试服务提供商,为考生提供良好的考试解决方案,通过计算化的考试模式,对涉及到实际应用的ICT学科的相关知识、能力和技巧进行评估。 [8] 认证考试有规定的间,并在保密的环境中通过在线计算考试方式进行。考试间一般为90~120分钟;根据考试科目,数量不等,一般为50—70型为单选、多选、判断考试科目与费用 华为认证考试科目、考试代码、考试费用速查表如下 [9] : 技术方向 认证科目 考试代码 考试费用 Finance HCIA-Finance H41-211 200 USD Public Safety HCIA-Public Safety H41-311 200 USD HCIP-Public Safety H41-321 300 USD Big Data HCIA-Big Data H13-711 200 USD HCIP-Big Data Developer H13-723 300 USD HCIP-Big Data Operation & Maintenance H13-722 300 USD HCIE-Big Data-Data Mining笔 H13-731 300 USD HCIE-Big Data-Data Mining实验 H13-732 8000CNY HCIE-Big Data-Data Mining面 H13-733 AI HCIA-AI H13-311 200 USD HCIP-AI HiAI Developer H13-322 300 USD HCIP-AI EI Developer H13-321 300 USD IoT HCIA-IoT H12-111 200 USD HCIP-IoT Developer H52-111 300 USD Intelligent Video Surveillance HCIA-Intelligent Video Surveillance H12-511 200 USD Enterprise Comunication HCIA-Unified Communication H11-811 200 USD HCIP-Unified Communication H11-828 300 USD HCIA-Video Conference H11-851 200 USD HCIP-Video Conference H11-861 300 USD HCIE-Enterprise Communication 笔 H11-879 300 USD HCIE-Enterprise Communication 实验 H11-880 8000CNY HCIE-Enterprise Communication 面 H11-881 GaussDB HCIA-GaussDB H13-911 200 USD HCIP-GaussDB-OLTP H13-921 300 USD HCIP-GaussDB-OLAP H13-922 300 USD Cloud Service HCIA-Cloud Service H13-811 200 USD HCIP-Cloud Service Solutions Architect H13-821 300 USD HCIP-Cloud Service Developer H53-821 300 USD HCIE-Cloud Service Solutions Architect笔 H13-831 300 USD HCIE-Cloud Service Solutions Architect实验 H13-832 8000CNY HCIE-Cloud Service Solutions Architect面 H13-833 Cloud Computing HCIA-Cloud Computing H13-511 200 USD HCIP-Cloud Computing H13-527 300 USD HCIP-Cloud Computing-Container H13-526 300 USD HCIP-Cloud Computing-OpenStack H13-525 300 USD HCIP-Cloud Computing Developer H53-511 300 USD HCIE-Cloud Computing笔 H13-531 300 USD HCIE-Cloud Computing实验 H13-532 8000CNY HCIE-Cloud Computing面 H13-533 Kunpeng Application Developer HCIA-Kunpeng Application Developer H13-111 200 USD Data Center HCIA-Data Center H13-411 200 USD HCIP-Data Center-ITIDM H13-421 160 USD HCIP-Data Center-CDCDM H13-422 160 USD HCIE-Data Center 笔 H13-431 300 USD HCIE-Data Center 实验 H13-432 8000CNY HCIE-Data Center 面 H13-433 Intelligent Computing HCIA-Intelligent Computing H13-211 200 USD HCIP-Intelligent Computing H13-221 300 USD HCIE-Intelligent Computing笔 H13-231 300 USD HCIE-Intelligent Computing实验 H13-232 8000CNY HCIE-Intelligent Computing面 H13-233 Storage HCIA-Storage H13-611 200 USD HCIP-Storage-CCSN H13-621 160 USD HCIP-Storage-CCSS H13-622 160 USD HCIP-Storage-CDPS H13-623 160 USD HCIE-Storage 笔 H13-629 300 USD HCIE-Storage 实验 H13-630 8000CNY HCIE-Storage 面 H13-631 Routing & Switching HCIA-Routing & Switching H12-211 200 HCIP-Routing & Switching-IERS H12-221 160 HCIP-Routing & Switching-IENP H12-222 160 HCIP-Routing & Switching-IEEP H12-223 160 HCIE-Routing & Switching 笔 H12-261 300 HCIE-Routing & Switching 实验 H12-262 8000CNY HCIE-Routing & Switching 面 H12-263 WLAN HCIA-WLAN H12-311 200 HCIP-WLAN-CEWA H12-321 160 HCIP-WLAN-POEW H12-322 160 Security HCIA-Security H12-711 200 HCIP-Security-CISN H12-721 160 HCIP-Security-CSSN H12-722 160 HCIP-Security-CTSS H12-723 160 HCIE-Security 笔 H12-731 300 HCIE-Security 实验 H12-732 8000CNY HCIE-Security 面 H12-733 SDN HCIA-SDN H31-611 200 HCIP-SDN H31-612 300 Transmission HCIA-Transmission H31-311 200 HCIP-Transmission H31-341 300 HCIE-Transmission 笔 H12-931 300 HCIE-Transmission 实验 H12-932 8000CNY HCIE-Transmission 面 H12-933 Access HCIA-Access H35-210 200 HCIP-Access H35-211 300

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值