【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 2023.05-B卷-华为OD机试 - AI面板识别

news2024/11/19 17:45:40

2023大厂笔试模拟练习网站(含题解)
www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。

提交链接:

首页 - CodeFun2000

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

题目内容

AI识别到面板上有N (1 \leq N \leq 100) 个指示灯,灯大小一样,任意两个之间无重叠。

由于AI识别误差,每次识别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2,y2),

请输出先行后列排序的指示灯的编号,排序规则:

1.每次在尚未排序的灯中挑选最高的灯作为的基准灯,

2.找出和基准灯属于同一行所有的灯进行排序。两个灯高低偏差不超过灯半径算同一行(即两个灯坐标的差\leq灯高度的一半)。

输入描述

第一行为N,表示灯的个数 接下来N行,每行为1个灯的坐标信息,格式为:

编号x1 y1 2 y2
  • 编号全局唯一

  • 1\leq编号\leq100

  • 0\leqx1<x2\leq 1000

  • 0\leqy1\leq y2\leq 1000

输出描述

排序后的编号列表,编号之间以空格分隔

样例

输入

5
1 0 0 2 2
2 6 1 8 3
3 3 2 5 4
5 5 4 7 6
4 0 4 2 6

输出

12345

说明

0123456789x轴
011
11122
23322
333
44455
54455
6
7
8
y轴

Java算法源码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringJoiner;
 
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
 
    int n = sc.nextInt();
 
    Light[] lights = new Light[n];
    for (int i = 0; i < n; i++) {
      int id = sc.nextInt();
      int x1 = sc.nextInt();
      int y1 = sc.nextInt();
      int x2 = sc.nextInt();
      int y2 = sc.nextInt();
      lights[i] = new Light(id, (x1 + x2) / 2, (y1 + y2) / 2, (x2 - x1) / 2);
    }
 
    System.out.println(getResult(lights));
  }
 
  public static String getResult(Light[] lights) {
    // 按照圆心y坐标升序
    Arrays.sort(lights, (a, b) -> a.y - b.y);
 
    // ans记录题解
    StringJoiner ans = new StringJoiner(" ");
 
    // sameRowLights记录同一行的灯
    ArrayList<Light> sameRowLights = new ArrayList<>();
    Light base = lights[0];
    sameRowLights.add(base);
 
    for (int i = 1; i < lights.length; i++) {
      Light light = lights[i];
 
      // 如果lights[i]的纵坐标和base的纵坐标相差不超过半径,则视为同一行
      if (light.y - base.y <= base.r) {
        sameRowLights.add(light);
      } else {
        // 否则,不是同一行
        // 针对同一行的灯,再按照横坐标升序
        sameRowLights.sort((a, b) -> a.x - b.x);
        sameRowLights.forEach(a -> ans.add(a.id + ""));
        sameRowLights.clear();
 
        // 开始新的一行记录
        base = light;
        sameRowLights.add(base);
      }
    }
 
    // 注意不要漏了最后一行
    if (sameRowLights.size() > 0) {
      sameRowLights.sort((a, b) -> a.x - b.x);
      sameRowLights.forEach(a -> ans.add(a.id + ""));
    }
 
    return ans.toString();
  }
}
 
class Light {
  int id; // 编号
  int x; // 圆心横坐标
  int y; // 圆心纵坐标
  int r; // 圆半径
 
  public Light(int id, int x, int y, int r) {
    this.id = id;
    this.x = x;
    this.y = y;
    this.r = r;
  }
}

JS算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
 
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
 
const lines = [];
let n;
rl.on("line", (line) => {
  lines.push(line);
 
  if (lines.length === 1) {
    n = lines[0] - 0;
  }
 
  if (n && lines.length == n + 1) {
    lines.shift();
 
    const lights = lines.map((line) => {
      const [id, x1, y1, x2, y2] = line.split(" ").map(Number);
      return new Light(id, (x1 + x2) >> 1, (y1 + y2) >> 1, (x2 - x1) >> 1);
    });
 
    console.log(getResult(lights));
 
    lines.length = 0;
  }
});
 
class Light {
  constructor(id, x, y, r) {
    this.id = id; // 编号
    this.x = x; // 圆心横坐标
    this.y = y; // 圆心纵坐标
    this.r = r; // 圆半径
  }
}
 
function getResult(lights) {
  // 按照圆心y坐标升序
  lights.sort((a, b) => a.y - b.y);
 
  // ans记录题解
  const ans = [];
 
  // sameRowLights记录同一行的灯
  const sameRowLights = [];
  let base = lights[0];
  sameRowLights.push(base);
 
  for (let i = 1; i < lights.length; i++) {
    const light = lights[i];
 
    // 如果lights[i]的纵坐标和base的纵坐标相差不超过半径,则视为同一行
    if (light.y - base.y <= base.r) {
      sameRowLights.push(light);
    } else {
      // 否则,不是同一行
      // 针对同一行的灯,再按照横坐标升序
      sameRowLights.sort((a, b) => a.x - b.x).forEach((a) => ans.push(a.id));
      sameRowLights.length = 0;
 
      // 开始新的一行记录
      base = light;
      sameRowLights.push(base);
    }
  }
 
  // 注意不要漏了最后一行
  if (sameRowLights.length > 0) {
    sameRowLights.sort((a, b) => a.x - b.x).forEach((a) => ans.push(a.id));
    sameRowLights.length = 0;
  }
 
  return ans.join(" ");
}

Python算法源码

class Light:
    def __init__(self, id, x, y, r):
        self.id = id  # 编号
        self.x = x  # 圆心横坐标
        self.y = y  # 圆心纵坐标
        self.r = r  # 圆半径
 
 
# 输入获取
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
lights = list(map(lambda ele: Light(ele[0], (ele[1] + ele[3]) // 2, (ele[2] + ele[4]) // 2, (ele[3] - ele[1]) // 2), arr))
 
 
# 算法入口
def getResult():
    # 按照圆心y坐标升序
    lights.sort(key=lambda l: l.y)
 
    # ans记录题解
    ans = []
 
    # sameRowLights记录同一行的灯
    sameRowLights = []
    base = lights[0]
    sameRowLights.append(base)
 
    for i in range(1, len(lights)):
        light = lights[i]
 
        # 如果lights[i]的纵坐标和base的纵坐标相差不超过半径,则视为同一行
        if light.y - base.y <= base.r:
            sameRowLights.append(light)
        else:
            # 否则,不是同一行
            # 针对同一行的灯,再按照横坐标升序
            sameRowLights.sort(key=lambda l: l.x)
            for l in sameRowLights:
                ans.append(l.id)
            sameRowLights.clear()
 
            # 开始新的一行记录
            base = light
            sameRowLights.append(base)
 
    # 注意不要漏了最后一行
    if len(sameRowLights) > 0:
        sameRowLights.sort(key=lambda l: l.x)
        for l in sameRowLights:
            ans.append(l.id)
 
    return " ".join(map(str, ans))
 
 
# 算法调用
print(getResult())

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

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

相关文章

【双曲几何学 02】什么是极点和极线?

一、说明 Pole and polar 对于几何学&#xff0c;是普遍的概念。可能高中就学过&#xff0c;问题是在双曲几何又用到这个概念&#xff0c;因此&#xff0c;这里再次强调理解这个概念 。为后边学习双曲几何扫清障碍。 二、基本概念 在几何学中&#xff0c;极点和极线分别是相对于…

NetSuite SuiteQlet 功能包

目录 1.前言 2.功能说明 2.1术语 2.2功能概述 2.3逻辑阐释 3.安装 4.权限配置 ​​​5.操作指南 5.1Query查询 5.2Chart图表 5.3Dashboard仪表板发布 6.注意事项 7.视频链接 1.前言 SuiteQL是NetSuite数据分析框架中进行数据查询的有力工具&#xff0c;使用得当则…

华为云CodeArtBuild减负!云端编译构建,让你的开发省时省力!

每一个剑客都需要一把趁手的利器&#xff0c;初学者如何利用编译软件&#xff1f;只需五分钟&#xff0c;带你体验软件开发的效率。 请注册华为云账号并完成实名认证&#xff0c;实验过程中请使用Chrome浏览器完成相关操作。 华为云账号注册步骤请参考&#xff1a; ​​http…

介质中的平面电磁波与色散效应

目录 理想介质中的平面电磁波 方程推导 解的讨论 ​​​​​​​瞬时形式 等相面 参数讨论 导电媒质中的均匀平面波 方程推导 解的讨论 波的特征分析 色散效应的讨论 理想介质中的平面电磁波 方程推导 已知两个方程 我们如果令 方程就可以化简为 这两个方程在数学…

《C++ Primer》--学习1

变量和基本类型 NULL是一个预处理变量&#xff0c;用NULL初始化指针和用0初始化指针是一样的&#xff08;但是不可以直接用值为0的int变量来初始化&#xff09;&#xff0c;应该尽量用nullptr&#xff0c;避免使用NULL 指向指针的指针 声明符中修饰符的个数并没有限制&#…

redis中sort妙用,实现动态生成排行榜

在游戏中&#xff0c;有很多维度的排行榜&#xff0c;服务器在实现过程中&#xff0c;一般都要预先维护对应因子的zset&#xff0c;比如根据玩家等级来排序&#xff0c;那就需要对应有一个level作为score的zset&#xff0c;如果是以战斗力排序&#xff0c;那就用战力作为score维…

微服务基础介绍

Part1一、基本概念 微服务最主要的功能是根据业务拆分成一个一个的子服务&#xff0c;实现功能的去耦合&#xff0c;每一个微服务提供单个业务功能的服务&#xff0c;各司其职&#xff0c;从技术角度看就是一种灵活独立的单元&#xff0c;能够自行单独启动和关闭&#xff0c;一…

亚马逊云科技中国峰会:自主驾驶开发平台 Amazon DeepRacer

0.引言 自动驾驶技术的快速发展和应用前景已经引起了广泛的关注&#xff0c;毋庸讳言&#xff0c;无人驾驶已经成为当今及未来前沿科技公司的重点研究方向。在这个领域中&#xff0c;Amazon DeepRacer作为一款全面的自主驾驶开发平台备受瞩目。 1.了解Amazon DeepRacer 1.1 什…

什么是消息队列(MQ)

其实字面意思很清楚了&#xff0c;存放消息的队列。 由于它的应用场景在服务器方面被重新定义而名声大噪&#xff0c;它的价值也被由原先的通信而重新定义&#xff0c;成为高并发场景下&#xff0c;分布式系统解耦合&#xff0c;任务异步&#xff0c;流量削峰的利器。 其实消息…

【flink】SinkUpsertMaterializer

在flink cdc同步数据时&#xff0c;基于sql的实现方式中发现了作业DAG有个SinkMaterializer算子&#xff0c;而且检查checkpoint历史时发现该算子state越来越大&#xff0c; 有必要搞清楚为什么会多了这个算子&#xff0c;作用又是什么。 通过算子名称定位到了源码为类org.apa…

常用API(String,ArrayList)

1:String类概述 String是字符串类型&#xff0c;可以定义字符串变量指向字符串对象String是不可变字符串的原因&#xff1f;1.String变量每次的修改都是产生并指向新的字符串对象。2.原来的字符串对象都是没有改变的&#xff0c;所以称不可变字符串。 2&#xff1a;String创建…

一文搞懂VOS费率前缀、地区前缀的区别和使用

登录VOS3000客户端 进入费率管理 "VOS费率前缀"和"地区前缀"的主要区别如下: VOS费率前缀:VOS(Voice Over Service)费率前缀是指用于国际长途电话呼叫的特定前缀号码。不同的运营商或服务提供商可能会使用不同的VOS费率前缀,用于标识国际长途通话的费…

49 最佳实践-性能最佳实践-Nvme磁盘直通

文章目录 49 最佳实践-性能最佳实践-Nvme磁盘直通49.1 概述49.2 操作指导 49 最佳实践-性能最佳实践-Nvme磁盘直通 49.1 概述 设备直通技术是一种基于硬件的虚拟化解决方案&#xff0c;通过该技术&#xff0c;虚拟机可以直接连接到指定的物理直通设备上。对于用户来说&#x…

ByteV联合“智农”打造数字孪生高标准农田,助力乡村振兴

ByteV联合“智农”打造的数字孪生高标准农田&#xff0c;不仅要让粮食稳产、增产&#xff0c;更要对土壤肥力进行改良和提升。不仅能够实现科技引领农业发展&#xff0c;更在智慧农业的基础上实现一站式托管&#xff0c;真正做到技术提升、5G引领、建后管护的闭环管理。让高标准…

C语言之指针详解(7)

目录 本章重点 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 上一篇博客我们说过会把回调函数的一些知识再给大家讲一遍 这里把void*强制类型转化为str…

【Hadoop】 | 搭建HA之报错锦集

知识目录 一、写在前面✨二、Hadoop的active结点无法主备切换&#x1f525;三、Hadoop Web端无法上传文件&#x1f349;四、hdfs创建文件夹报错&#x1f36d;五、IDEA操作Hdfs无法初始化集群&#x1f525;六、Java无法连接Hdfs&#x1f36d;七、找不到Hadoop家目录&#x1f525…

软件测试实战案例:支付功能板块如何测试?详细总结

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 大体上&#xff0…

ChatGPT数据安全隐患?本想提高效率,数据却遭泄露

一项新的研究发现&#xff0c;15%的员工经常在ChatGPT上上传公司数据&#xff0c;其中超过四分之一的数据被认为是敏感信息&#xff0c;这使公司在无形中面临安全漏洞的风险。 6月的研究报告《揭示真正的GenAI数据暴露风险》分析了超过10000名员工&#xff0c;主要研究员工如何…

(ICIP-2022)GAITTAKE:通过时间注意和关键点引导嵌入进行步态识别

GAITTAKE&#xff1a;通过时间注意和关键点引导嵌入进行步态识别 论文题目&#xff1a;GAITTAKE: GAIT RECOGNITION BY TEMPORAL ATTENTION AND KEYPOINT-GUIDED EMBEDDING 论文是华盛顿大学发表在ICIP 2022的工作 论文地址 ABSTRACT 步态识别是指根据远距离采集的视频数据&am…

【服务器数据恢复】OneFS文件系统下误删除文件的数据恢复案例

EMC Isilon存储结构&#xff1a; Isilon群集存储系统使用的是分布式文件系统OneFS。Isilon群集存储系统的每个节点均为单一OneFS文件系统&#xff0c;Isilon在进行横向扩展时不会影响数据的正常使用。Isilon群集存储系统所有节点在工作时都提供相同的功能&#xff0c;节点没有主…