华为OD算法题汇总

60、计算网络信号

题目

网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。注意:网络信号可以绕过阻隔物
array[m][n],二维数组代表网格地图
array[i][j]=0,代表i行j列是空旷位置
array[i][j]= x,(x为正整数)代表i行j列是信号源,信号强度是x,
array[i][j]=-1, 代表i行j列是阻隔物
信号源只有1个,阻隔物可能有0个或多个;
网络信号袁减是上下左右相邻的网格衰减1现要求输出对应位置的网络信号值。

输入
输入为三行,
第一行为 m、n,代表输入是一个mxn 的数组,
第二行是一串 mxn 如个用空格分隔的整数每连续n个数代表一行,再往后n个代表下一行,以此类推。对应的值代表对应的网格是空矿位置,还是信号源,还是阻隔物,
第三行是ì、j,代表需要计算 array[i][j] 的网络信号值。注意:此处i和j均从 0开始,即第一行i为0;

例如:

6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4

输出
输出对应位置的网络信号值,如果网络信号未覆盖到,也输出0。
一个网格如果可以途径不同的传播衰减路径传达,取较大的值作为其信号值。

解题思路

把信号源向上下左右四个方向扩散,并把满足条件的扩散点作为新的信号源继续扩散,直到信号值为0、或者扩散到“坐标系”边缘

6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0

对于以上输入,得到的二维数组(可视为坐标系)为

0 0  0 -1  0 
0 0  0  0  0 
0 0 -1  4  0 
0 0  0  0  0 
0 0  0  0 -1 
0 0  0  0  0

扩散后,最终为

0 0  1 -1  1 
0 1  2  3  2 
0 0 -1  4  3 
0 1  2  3  2 
0 0  1  2 -1 
0 0  0  1  0

这里一定要注意,二维数组和我们上学时常用的xy轴坐标系还是有区别的,它们的原点不同,下面简化一下以上二维数组坐标系示意图

在这里插入图片描述

6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4

这个输入,要求的输出array[1][4],它的结果是2;
我一开始把二维数组和上学时的xy轴坐标系给搞混了,死活想不明白(1,4)为啥是2,而不是1?

java代码

没有作输入的合法性校验,有兴趣的可以自己补充一下;
变量名起的也比较随意,大家不要学我

import java.util.LinkedList;
import java.util.Scanner;public class A60计算网络信号 {private static LinkedList<Danyuange> list = new LinkedList<>();private static int[][] zhouweiArr = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int[][] inputArr = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {int d = sc.nextInt();inputArr[i][j] = d;if(d > 0) {Danyuange yuan = new Danyuange();yuan.setX(i);yuan.setY(j);yuan.setD(d);list.add(yuan);}}}int queryX = sc.nextInt();int queryY = sc.nextInt();while (list.size() > 0) {Danyuange danyuange = list.removeFirst();kuosanMethod(inputArr, danyuange);}System.out.println(inputArr[queryX][queryY]);}private static void kuosanMethod(int[][] inputArr, Danyuange danyuange) {int x = danyuange.getX();int y = danyuange.getY();int d = danyuange.getD();for (int i = 0; i < 4; i++) {int newX = x + zhouweiArr[i][0];int newY = y + zhouweiArr[i][1];if(newX >= 0 && newX < inputArr.length && newY >= 0 && newY < inputArr[0].length) {if(inputArr[newX][newY] == 0) {inputArr[newX][newY] = d - 1;}if(inputArr[newX][newY] < d && inputArr[newX][newY] >= 2 && inputArr[newX][newY] != -1) {Danyuange newDanyuange = new Danyuange();newDanyuange.setX(newX);newDanyuange.setY(newY);newDanyuange.setD(d-1);list.add(newDanyuange);}}}}private static class Danyuange {int x;int y;int d;public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getD() {return d;}public void setD(int d) {this.d = d;}}
}

61、简易内存池

题目

请实现一个简易内存池根据请求命令完成内存分配和释放内存池支持两种操作命令REQUEST和 RELEASE ;
其格式为:
REQUEST=请求的内存大小
表示请求分配指定大小内存
如果分配成功,返回分配到的内存首地址;
如果内存不足,或指定的大小为零则输出 error;
RELEASE=释放的内存首地址
表示释放掉之前分配的内存,释放成功无需输出如果,
释放不存在的首地址则输出 error

注意:
1.内存池总大小为 100 字节
2.内存池地址分配必须是连续内存,并优先从低地址分配
3.内存释放后可被再次分配,已释放的内存在空闲时不能被二次释放4.不会释放已申请的内存块的中间地址
5.释放操作只是针对首地址所对应的单个内存块进行操作,不会影响其他内存块

输入:
首行为整数 N,表示操作命令的个数取值范围 8<N<=100
接下来的N行,每行将给出一个操作命令;
操作命令和参数之间用“=”分割

输出:
见题目输出要求

示例1:

输入:
2
REQUEST=10
REQUEST=20
输出:
0
10

示例2:

输入:
6
REQUEST=10
REQUEST=20
RELEASE=0
RELEASE=20
REQUEST=20
REQUEST=10
输出:
0
10
error
30
0

解题思路

1)用二维数组收录输入,会非常便于后续操作;当然也可以用单独的数组;
2)用treemap模拟内存(必须用treemap,需要key有序);

  • RELEASE释放比较简单,包含key就remove,不包含就输出error;
  • REQUEST单独一个方法处理,会使代码逻辑很清晰;自定义变量left初始值为0,表示与下一个已用内存首地址之间、未使用内存的首地址;
	0————k1-v1————k2-v2————...————kn-vn————max
  • 如上图示意,k-left就代表空闲内存的长度,k1-0就是最前边的空闲内存,从前往后、循环测试map的所有空闲内存key-left是否大于等于新内存l;
  • ps:学会取map的key放入list的方法 List keyList = new ArrayList<>(map.keySet())
  • 如果这个长度大于等于要存入的长度l,map直接put(left, left + l),并结束方法return;
  • ps:还是为了方便,v不存真实的尾地址索引,而是直接存(索引+1),即占用内存长度是 [k, v)
  • 如果这个长度小于要存入的长度l,则left = v,继续下一个循环;
  • 当map的所有key都测试过,仍未找到可以放新内存l的地方,测试 max-left(此时left等于vn)是否大于等于l,
  • 如果大于等于,put(left, left + l)
  • 如果小于,输出error;

java代码


public class A61简易内存池 {private static Map<Integer, Integer> map = new TreeMap<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);int orderNum = Integer.parseInt(sc.nextLine());String[][] orders = new String[orderNum][];for (int i = 0; i < orderNum; i++) {orders[i] = sc.nextLine().split("=");}for (int j = 0; j < orderNum; j++) {String order = orders[j][0];int length = Integer.parseInt(orders[j][1]);if("REQUEST".equals(order)) {requestMethod(length);} else {if(map.containsKey(length)) {map.remove(length);} else {System.out.println("error");}}}}private static void requestMethod(int length) {int left = 0;if(map.size() == 0){map.put(length, left + length);//包含左、不包含右}List<Integer> keyList = new ArrayList<>(map.keySet());for (Integer key : keyList) {if(key - left >= length) {map.put(left, left + length);//包含左、不包含右System.out.println(left);return;} else {left = map.get(key);}}//循环结束,表示所有kv之间,都没有找到能放length的地方;检查剩余字节if(100 - left >= length) {map.put(left, left + length);//包含左、不包含右System.out.println(left);} else {System.out.println("error");}}
}

x

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

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

相关文章

基于STM32的智能晾衣设计

1.简介 本设计的目的是开发一种湿度传感智能衣物干燥杆系统&#xff0c;这是一个由单片机控制芯片控制的实时检测系统。该系统使用 DHT11温湿度传感器&#xff0c;检测大气的温度和湿度&#xff0c;然后处理信息&#xff0c;控制电机&#xff0c;完成衣物的收集和干燥工作。  …

相控阵雷达原理详解

相控阵&#xff0c;即相位控制阵列&#xff0c;通过控制阵列各个单元的馈电相位来改变波束指向。 相控阵雷达的原理可以清晰地归纳为以下几点&#xff1a; 1. 基本构成&#xff1a; - 相控阵雷达&#xff0c;即相位控制电子扫描阵列雷达&#xff08;Phased Array Radar, PAR&a…

脚本新手必看!一文掌握${}在Shell脚本中的神操作!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 变量引用与默认值📝 字符串操作📝 数组与索引📝 参数扩展与模式匹配⚓️ 相关链接 ⚓️📖 介绍 📖 在编程的广阔世界里,隐藏着无数小巧而强大的工具,它们如同魔法般简化着复杂的操作。今天,我将…

抖音换地方IP会马上更新地址吗?解析抖音IP地址变化的真相

随着移动互联网的飞速发展&#xff0c;短视频平台如抖音已深入人心&#xff0c;成为大众生活中不可或缺的一部分。其中&#xff0c;IP地址作为用户在互联网世界的“身份证”&#xff0c;不仅关系到用户的隐私安全&#xff0c;也直接影响着平台内容推送的精准性。当我们跨越地域…

【Neural signal processing and analysis zero to hero】- 1

The basics of neural signal processing course from youtube: 传送地址 Possible preprocessing steps Signal artifacts (not) to worry about doing visual based artifact rejection so that means that before you start analyzing, you can identify those data epic…

Python数据结构之实现自定义栈与队列详解

概要 在计算机科学中,栈(Stack)和队列(Queue)是两种常见的数据结构。它们在算法和数据处理方面有着广泛的应用。本文将详细介绍如何在Python中实现自定义的栈与队列,并包含详细的示例代码,帮助深入理解这两种数据结构的工作原理和使用方法。 栈(Stack) 什么是栈 栈…

i5 13490F比13400F性能强多少?13490F和i5 13400F性能对比评测

英特尔再一次带来了13代全新的中国特供版的小黑盒&#xff0c;即酷睿i5-13490F和i7-13790F这两款型号&#xff0c;这两款CPU相当于i5 13400F和i7 13700F升级版&#xff0c;拥有更高的频率和三级缓存&#xff0c;以获得更好的游戏性能。我们知道&#xff0c;i5 13490F是用作替代…

LLM 应用开发平台特训

引言 随着人工智能技术的飞速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;如 GPT 系列已成为构建智能应用的重要基础。LLMOps&#xff08;Large Language Model Operations&#xff09;作为管理 LLM 支持的应用程序生命周期的工具和最佳实践&#xff0c;正逐渐受到…

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)

文章目录 一、引言⭐1.1下载镜像烧系统⭐1.2开发板初始化系统配置远程登陆&#x1f496; 远程ssh&#x1f496;查看ubuntu桌面&#x1f496; 远程向日葵 二、部署LLMS大模型&yolov5物体检测⭐2.1 快速启动LLMS大模型&#x1f496;拉取代码&#x1f496;下载mode数据&#x…

C++树(二)【直径,中心】

目录&#xff1a; 树的直径&#xff1a; 树的直径的性质&#xff1a; 性质1&#xff1a;直径的端点一定是叶子节点 性质2&#xff1a;任意点的最长链端点一定是直径端点。 性质3&#xff1a;如果一棵树有多条直径,那么它们必然相交&#xff0c;且有极长连…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App&#xff0c;想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料&#xff0c;现在把我查询的结果记录下&#xff0c;方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Python实战MySQL之数据库操作全流程详解

概要 MySQL是一种广泛使用的关系型数据库管理系统,Python可以通过多种方式与MySQL进行交互。本文将详细介绍如何使用Python操作MySQL数据库,包括安装必要的库、连接数据库、执行基本的CRUD(创建、读取、更新、删除)操作,并包含具体的示例代码,帮助全面掌握这一过程。 准…

CodeSouler:AI赋能,编程效率的革命性飞跃!

&#x1f525; 功能大揭秘&#xff0c;让你的代码飞起来&#xff01;&#x1f525; 01 添加代码注释 &#x1f4dd; 告别繁琐&#xff0c;一键添加精准注释&#xff01;提升代码清晰度&#xff0c;让后续维护不再是难题。 02 生成单元测试 &#x1f9ea; 智能分析&#xff0c;自…

C1W4.LAB.Vector manipulation+Hash functions and multiplanes

理论课&#xff1a;C1W4.Machine Translation and Document Search 文章目录 Python 中的矢量操作Transforming vectorsExample 1Example 2 Frobenius Norm Hash functions and multiplanesBasic Hash tablesPlanesHash Function with multiple planesRandom PlanesDocument v…

苹果x怎么录屏?手把手教你操作

随着社交媒体和视频平台的兴起&#xff0c;人们越来越习惯于通过视频来分享生活点滴、传播信息。苹果X手机凭借其出色的性能和高清屏幕&#xff0c;成为了许多用户录制屏幕视频的首选设备。可苹果x怎么录屏呢&#xff1f;本文将详细介绍苹果x手机的内置录屏方法&#xff0c;通过…

Blender使用(二)点线面基本操作

Blender使用之点线面 1.编辑模式 tab键进行切换&#xff0c;为了方便菜单调出&#xff0c;可以设置键位映射为拖动时的饼菜单。 设置好后&#xff0c;按住tab键移动鼠标(注意不要点击鼠标)&#xff0c;即可弹出编辑菜单。 默认是点模式&#xff0c;在左上角可进行点线面的切换…

【linux高级IO(三)】初识epoll

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 初识e…

帕金森营养宝典,守护你的健康每一天!

&#x1f44b; 嗨&#xff0c;亲爱的小伙伴们&#xff01;今天我们来聊聊一个有点“严肃”但超级重要的话题——帕金森患者应该补充哪些营养&#xff1f;&#x1f914; &#x1f4aa; 首先&#xff0c;我们要知道&#xff0c;帕金森是一种常见的神经系统疾病&#xff0c;它可能…

自制一个指定容量缓存,并实现最近使用的最后删除

需求 实现一个缓存key-value结构&#xff0c;并设定容量最大值&#xff0c;当put进去的时候&#xff0c;如果超过最大容量&#xff0c;则将最早放进去的删除当get的时候&#xff0c;返回key值&#xff0c;并将key放到后面&#xff08;表示最近使用过&#xff0c;最后删除&…

mp3音乐剪辑软件大盘点,安利7款小白必备的免费mp3剪辑软件(详解)

mp3现在是最常见的音频格式&#xff0c;无处不在&#xff0c;包括下载音乐、播放播客、保存有声读物等等。因此&#xff0c;拥有一款强大的mp3音乐剪辑软件至关重要。使用mp3剪辑软件&#xff0c;你可以修剪、合并、压缩&#xff0c;甚至转换mp3为其他常见音频格式。所以&#…