华为OD机试真题 - 最大时间 (D卷,100分)

题目描述

给定一个数组,里面有 6 个整数,求这个数组能够表示的最大 24 进制的时间是多少,输出这个时间,无法表示输出 invalid。

目录

题目描述

输入描述

输出描述

用例

题目解析

Java算法源码

JS算法源码

Python算法源码

C算法源码

华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟,机试是在牛客考试,练习的时候也可以在牛客网练习,提前熟悉操作

https://ac.nowcoder.com/acm/contest/5652/K

点击上方链接进入牛客练习界面,可以自定义题目,自定义输入、输出等等,华为OD真实机试环境,非其他第三方平台模拟。

输入描述

输入为一个整数数组,数组内有六个整数。

输入整数数组长度为 6,不需要考虑其它长度,元素值为 0 或者正整数,6 个数字每个数字只能使用一次。

输出描述

输出为一个 24 进制格式的时间,或者字符串”invalid“。

用例

题目解析

本题可以使用深度优先搜索DFS求解全排列,当然求解过程中需要过滤掉不合法的时间排列,然后剩下只需要进行默认的字典序升序后,获取最后一个时间排列就是最大的时间

JavaScript算法源码

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  const arr = JSON.parse(line);
  const regExp = /^(([01][0-9])|([2][0-3]))([0-5][0-9])([0-5][0-9])$/;

  const backtrack = (arr, used, path, res) => {
    if (path.length === arr.length) {
      const timeStr = path.join("");
      if (regExp.test(timeStr)) res.push(timeStr);
      return;
    }

    for (let i = 0; i < arr.length; i++) {
      if (!used[i]) {
        path.push(arr[i]);
        used[i] = true;
        backtrack(arr, used, path, res);
        used[i] = false;
        path.pop();
      }
    }
  };

  const res = [];
  backtrack(arr, new Array(arr.length).fill(false), [], res);

  if (!res.length) return console.log("invalid");

  const max = res.sort().at(-1);
  console.log(`${max[0]}${max[1]}:${max[2]}${max[3]}:${max[4]}${max[5]}`);
});


Java算法源码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Link

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试题库D卷 文章被收录于专栏

2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务