刷了3个月的华为OD算法题,刷出感觉了,如洁柔般丝滑,文末送《漫画算法2:小灰的算法进阶》
目录
- 一、考研二战,入职华为,反向调剂电子科大深圳
- 下面分享一道2023 B卷 朋友抽中题 简易内存池:
- 二、题目描述
- 三、输入描述
- 四、输出描述
- 样例:
- 输出样例:
- 五、解题思路
- 六、Java算法源码
- 七、效果展示
- 1、输入
- 2、输出
- 3、说明
- 4、再输入
- 5、再说明
- 6、如果走后一次请求的是20,会怎么样呢?
- 八、漫画算法2:小灰的算法进阶
- 参与方式
大家好,我是哪吒。
最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经三个多月了,刷了270多道题,刚开始也有过想放弃的想法,刷一道卡一道,一道题要用1小时,因为太菜了吗?哎,一言难尽
随着时间的推移,感觉自己慢慢上道了,一道题用不上1个小时了,哈哈,这就是进步嘛
一、考研二战,入职华为,反向调剂电子科大深圳
不经意间在网上看到一个帖子《考研二战,入职华为,反向调剂电子科大深圳》,写的真不错,分享给大家。
加入华为OD后,给我的感觉比想象中,或者说比网上大部分的说法都要好。
我觉得在这里能学到很多东西,毕竟是大公司,平台也大,能接触到的牛人也多。
我觉得一个初来乍到的应届本科生受到歧视也正常,周围都是名校硕博,作为一个新人我没有任何理由骄傲。技不如人甘拜下风,虚心一点好好学习也是好的。
另外,我觉得无论是校招进华为正式,还是社招进华为od,我感觉没有想象中区别那么明显。
技术岗还是靠实力说话。我们的od员工和正式员工办公上没有一点差别,甚至我们组的美本的正式员工第一个月都不知道我们之间有什么区别。
我的本科同班同学校招进华为的也搞不懂我工号和他们正式员工工号的区别。
我的od同事有7年的ios开发经验,是从隔壁某个体面的硬件大厂跳槽过来的,因为工作经验丰富,反而成为了我和一个正式员工(应届)的老师。
我相信以他的实力,一年期满很快就能完成转正。即便转正名额给他而不给我,我也服气的。
我觉得在华为有一个巨大的优势,就是信息上的优势。
毕竟是在华为,了解到的资讯都是第一手的,很多消息非常通畅。
比方说我之前在学校完全不能理解大公司是怎么招人的,而在这里通过别人的只言片语,能对这个流程有个初步的理解感受。
包括下文中我提到了解非全硕士的过程,华为这个平台也给我提供了第一手的信息。
对于我的朋友,行业外的肯定不会认可我的本科,但是我直接笼统地说我在华为工作,外行便会肃然起敬。
而行业内的人我稍微解释一下他们也能理解,行业内还是看你的技术的,我还是非常肯定我自己的专业实力的。
并且行业内也知道我的本科杭州电子科技大学是华为目标院校,可以直接华为校招成为正式员工的。
比方说我这个工作除了签协议是和德科公司签的以外,别的部分都挺完美的了:是软件开发的技术岗、华为核心部分、利于项目经验积累、待遇不错。
毕竟我就是正儿八经的华为的社招,错过了校招的正式招聘时间才只能和德科签合同的。
反正对于我来说,每个人要找到适合自己的,找到自己的需求。需要什么,就去拿什么。入职的这一个月见识到了很多东西,收获颇丰,进步巨大。每天都在不停地自我更新中,感觉很好。
关于华为od,网上诟病最多的就是转正华为正式员工部分了。甚至我曾经做过hr的表姐都告诫我,“千万别去华为od,因为od永远不可以转正。”
我多方打听,包括反复跟招我的人确定转正情况。对方答复说我们部门有30%的转正率。我也通过其他不可能跟招我的人有联系的人确认了下,确认这个部门的转正率确实是30%。这才让我足够信任他们。
然后我在本科学校杭电的校内群里联系了两个华为od的校友,他们都是入职一年就获得了转正资格。我觉得他们是利益相关者,所以他们的话只能信一半。
我的核心想法是,我来华为就是来提升进步的,既然有转正机会,那么我就应该进去试试。如果我没法转正,那么我应该华为校招的正式岗位也过不了。
如果放弃这个offer去别的公司,如海康。几年之后我大概率还是要跳槽来华为,那么既然华为的低端社招=od,那么我跳槽华为也只能当od。
下面分享一道2023 B卷 朋友抽中题 简易内存池:
二、题目描述
请实现一个简易内存池,根据请求命令完成内存分配和释放。
内存池支持两种操作命令,REQUEST和RELEASE,其格式为:
1、REQUEST
请求的内存大小表示请求分配指定大小内存,如果分配成功,返回分配到的内存首地址;如果内存不足,或指定的大小为0,则输出error。
2、RELEASE
释放的内存首地址 表示释放掉之前分配的内存,释放成功无需输出,如果释放不存在的首地址则输出error。
注意:
1.内存池总大小为100字节。
2.内存池地址分配必须是连续内存,并优先从低地址分配。
3.内存释放后可被再次分配,已释放的内存在空闲时不能被二次释放。
4.不会释放已申请的内存块的中间地址。
5.释放操作只是针对首地址所对应的单个内存块进行操作,不会影响其它内存块。
三、输入描述
首行为整数N,表示操作命令的个数。
接下来的N行,每行将给出一个操作命令,操作命令和参数之间用“=”分割
四、输出描述
输出最后请求的内存的首地址。
如果位置已满,则输出-1。
样例:
2
REQUEST=10
REQUEST=20
输出样例:
0
10
五、解题思路
- 定义一个map,存储内存的分配情况(key:内存的首地址,value:内存的尾地址);
- 请求内存时
- 如果map是空,放在首地址0处;
- 如果map不为空,遍历已经存入的首地址;
- 已经存入的首地址 - 第一个空闲区域的首地址 大于 请求的内存值;
- 将当前请求的内存的首地址和内存的尾地址存入map;
- 反之,重置前一个空闲区域的首地址;
- 判断剩余内存是否可以容下当前请求值;
- 如果可以容下,将当前请求的内存的首地址和内存的尾地址存入map;
- 如果容不下,输出error;
- 释放内存时,将其首地址的key移除map;
- 最后输出最后一次请求的首地址。
注意:如果最后发起的命令是RELEASE,也是可以的,会返回最后一次REQUEST的首地址。
六、Java算法源码
package com.guor.od;import java.util.*;public class OdTest03 {static final String REQUEST = "REQUEST";static final String RELEASE = "RELEASE";static final String ERROR = "error";static final int MAX = 100;public static void main(String[] args) {try {Scanner sc = new Scanner(System.in);// 操作命令的个数int N = Integer.parseInt(sc.nextLine());// 每一行的操作命令和参数String[][] lineArr = new String[N][2];// 接下来的N行,每行将给出一个操作命令,操作命令和参数之间用“=”分割for (int i = 0; i < N; i++) {lineArr[i] = sc.nextLine().split("=");}for (int i = 0; i < N; i++) {// 内存大小int value = Integer.parseInt(lineArr[i][1]);if (lineArr[i][0].startsWith(REQUEST)) {// 请求// 非法输入(内存池总大小为100字节)if (value > MAX || value <= 0) {System.out.println(ERROR);return;}request(value);} else if (lineArr[i][0].startsWith(RELEASE)) {// 释放map.remove(value);} else {// 非法输入System.out.println(ERROR);}}} catch (Exception e) {// 非法输入System.out.println(ERROR);}}/*** 存储内存的分配情况* key:内存的首地址* value:内存的尾地址*/static Map<Integer, Integer> map = new TreeMap<>();/*** 请求内存* @value:大小*/public static void request(int value) {int zero = 0;// 前一个空闲区域的首地址int beforeHeadAddress = 0;// 如果map是空,放在首地址0处if (map.isEmpty()) {map.put(zero, value);} else {// 已经存入的首地址List<Integer> headList = new ArrayList<>(map.keySet());// 已经存入的首地址for (Integer requestedHead : headList) {// 已经存入的首地址 - 第一个空闲区域的首地址 大于 请求的内存值if (requestedHead - beforeHeadAddress >= value) {/*** beforeHeadAddress:内存的首地址* beforeHeadAddress + value:内存的尾地址*/map.put(beforeHeadAddress, beforeHeadAddress + value);} else {// 前一个空闲区域的首地址beforeHeadAddress = map.get(requestedHead);}}// 判断剩余内存是否可以容下当前请求值if (MAX - beforeHeadAddress >= value) {map.put(beforeHeadAddress, beforeHeadAddress + value);} else {// 如果位置已满,则输出-1。System.out.println("-1");}}System.out.println(beforeHeadAddress);}
}
七、效果展示
1、输入
4
REQUEST=20
REQUEST=30
RELEASE=0
REQUEST=30
2、输出
50
3、说明
- 第一次请求20
- 第二请求30
- 第三次释放首地址为0的内存
- 第四次请求30,第一个空闲区域的首地址是0,但空闲长度只有20,放不下当前请求的地址,因此消耗剩余内存,输出最后一次请求的首地址为50。
4、再输入
6
REQUEST=20
REQUEST=30
RELEASE=0
REQUEST=30
REQUEST=10
REQUEST=10
5、再说明
- 第一次请求20
- 第二请求30
- 第三次释放首地址为0的内存
- 第四次请求30,第一个空闲区域的首地址是0,但空闲长度只有20,放不下当前请求的地址,因此消耗剩余内存。
- 第五次请求10,第一个空闲区域的首地址是0,长度20,可以容下当前请求的内存10。
- 第六次请求10,第一个空闲区域的首地址是10,长度10,可以容下当前请求的内存10。
- 输出最后一次请求的首地址为10。
6、如果走后一次请求的是20,会怎么样呢?
八、漫画算法2:小灰的算法进阶
本书是《漫画算法:小灰的算法之旅》的续作,通过主人公小灰的心路历程,用漫画的形式讲述了多个数据结构、算法及复杂多变的算法面试题目。
- 第1章介绍了几种典型的排序算法,包括选择排序、插入排序、希尔排序、归并排序、基数排序。
- 第2章介绍了“树”结构的高级应用,包括二叉查找树、AVL树、红黑树、B树和B+树。
- 第3章介绍了“图”结构的概念,以及深度优先遍历、广度优先遍历、单源最短路径、多源最短路径算法。
- 第4章介绍了“查找”相关的算法和数据结构,包括二分查找算法、RK算法、KMP算法,以及“跳表”这种用于高效查找的数据结构。
- 第5章介绍了多种职场上流行的算法面试题目及详细的解题思路,例如螺旋遍历二维数组、寻找数组中第k大元素、求股票交易的更大收益等。
参与方式
图书数量:本次送出 4 本 !!!⭐️⭐️⭐️⭐️
活动时间:截止到 2023-08-15 12:00:00
🏆抽奖方式:
- 根据文章内容进行高质量评论
- 留言中随机抽取4位小伙伴
🏆哪吒会在本文留言区置顶公布中奖名单
名单公布时间:2023-08-15 13点
🏆第1期中奖名单公布:
啥咕啦呛
空圆小生
狮子也疯狂
千子。
相关文章:

刷了3个月的华为OD算法题,刷出感觉了,如洁柔般丝滑,文末送《漫画算法2:小灰的算法进阶》
目录 一、考研二战,入职华为,反向调剂电子科大深圳下面分享一道2023 B卷 朋友抽中题 简易内存池:二、题目描述三、输入描述四、输出描述样例:输出样例: 五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明…...
ip转换器哪个好用 ip地址切换器有哪些
在互联网时代,IP转换器成为了实现高效工作的常见工具。而如今,市面上涌现出了众多的IP转换器软件,使得用户在选择时感到困惑。本文将介绍一种深度IP转换器软件,探讨其特点和优势,以及与其他软件相比的差异,…...

【python】爬取豆瓣电影Top250(附源码)
前言 在网络爬虫的开发过程中,经常会遇到需要处理一些反爬机制的情况。其中之一就是网站对于频繁访问的限制,即IP封禁。为了绕过这种限制,我们可以使用代理IP来动态改变请求的来源IP地址。在本篇博客中,将介绍如何使用代理IP的技术…...

35岁职业危机?不存在!体能断崖?不担心
概述 90年,硕士毕业,干了快8年的Java开发工作。现年33岁,再过2年就要35岁。 工作这些年,断断续续也看过不少35岁找不到工作,转行,降薪入职的传闻、案例。 35岁,甚至30岁之后,体能…...

C语言——指针进阶
本章重点 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析 1. 字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* int main() { char ch w; char *pc &ch; *pc w; return 0; }…...

heap pwn 入门大全 - 1:glibc heap机制与源码阅读(上)
本文为笔者学习heap pwn时,学习阅读glibc ptmalloc2源码时的笔记,与各位分享。可能存在思维跳跃或错误之处,敬请见谅,欢迎在评论中指出。本文也借用了部分外网和其他前辈的素材图片,向各位表示诚挚的感谢!如…...

树莓派RP2040 用Arduino IDE安装和编译
目录 1 Arduino IDE 1.1 IDE下载 1.2 安装 arduino mbed os rp2040 boards 2 编程-烧录固件 2.1 打开点灯示例程序 2.2 选择Raspberry Pi Pico开发板 2.3 编译程序 2.4 烧录程序 2.4.1 Raspberry Pi Pico开发板首次烧录提示失败 2.4.2 解决首次下载失败问题 2.4.2.1…...

云安全攻防(八)之 Docker Remote API 未授权访问逃逸
Docker Remote API 未授权访问逃逸 基础知识 Docker Remote API 是一个取代远程命令行界面(rcli)的REST API,其默认绑定2375端口,如管理员对其配置不当可导致未授权访问漏洞。攻击者利用 docker client 或者 http 直接请求就可以…...

2023-08-13 LeetCode每日一题(合并两个有序数组)
2023-08-13每日一题 一、题目编号 88. 合并两个有序数组二、题目链接 点击跳转到题目位置 三、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 …...
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
升级后,运行显示项目的时候出现下面错误 2023-08-12 10:57:39.174 [http-nio-8080-exec-3] [1;31mERROR[0;39m [36morg.jeecg.common.aspect.DictAspect:104[0;39m - json解析失败Java 8 date/time type java.time.LocalDateTime not supported by default: add Mo…...

「C/C++」C/C++搭建程序框架
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 1. 分离职…...

Android 内存泄漏
名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回…...
Android上的基于协程的存储框架
在Android上,经常会需要持久化本地数据,比如我们需要缓存用户的配置信息、用户的数据、缓存数据、离线缓存数据等等。我们通常使用的工具为SharePreference、MMKV、DataStore、Room、文件等等。通过使用现有的存储框架,结合协程,我…...

虚拟现实与增强现实技术的商业应用
章节一:引言 随着科技的不断发展,虚拟现实(Virtual Reality,简称VR)与增强现实(Augmented Reality,简称AR)技术正日益成为商业领域中的重要创新力量。这两种技术为企业带来了前所未…...
每日后端面试5题 第六天
1. Java中有几种类型的流 字符流、字节流 输入流、输出流 节点流、处理流 2 .Spring支持的几种bean的作用域 五种: 1.singleton bean在每个ioc容器中只有一个实例 2.prototype 可以有多个实例 3-5在web环境中才生效 3.request 每次请求才创建bean 4.se…...

LeetCode150道面试经典题-- 两数之和(简单)
1.题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意…...

转义字符\
转移字符,就是通过字符,来转变原来字符的意思 常见的转义字符: 1、 2 注:" 的作用和他是类似的 3 4、 当打印\a时,电脑会出现一个警告,蜂鸣的声音 5、 阿斯克码表...

什么是DNS欺骗及如何进行DNS欺骗
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是 DNS 欺骗?二、开始1.配置2.Ettercap启动3.操作 总结 前言 我已经离开了一段时间,我现在回来了,我终于在做一个教…...

Android核心开发之——OpenGL
OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...