校招算法题实在不会做,有没有关系?
文章目录
- 前言
- 一、校招
- 二、时间复杂度
- 1、单层循环
- 2、双层循环
- 三、空间复杂度
- 四、数据结构
- 五、校招算法题实在不会做,有没有关系?
- 六、英雄算法集训
前言
英雄算法联盟八月集训 已经接近尾声,九月算法集训将于 09月01日 正式开始,目前已经提前开启报名,报名方式见 这里,想要参加的建议提早报名,因为对于算法零基础的同学会有一些提前的准备工作,比如需要1 - 3天的时间完成预训练 和 九日集训 提前养成刷题的习惯,再参加算法集训会更加有成效。
一、校招
对于校招,很多同学最惧怕的莫过于算法题了,因为很多题目,虽然感觉似曾相识,但是题型千变万化,加上紧张的氛围,原本会做的算法也不会了,从而和这次招聘失之交臂。
那么算法在平时工作中,到底起多大的作用?是否一定要学呢?这个应该是绝大多数同学最困惑的问题,看完这篇文章,你的心中或许会有一定的答案。
二、时间复杂度
但凡写过代码的同学都知道,如果一段代码执行效率低,那么在函数层层嵌套下,整个函数执行完的时间就会变长,就有可能出现未响应的情况。

如果一个软件,每一步操作都非常耗时,给人的体验就是非常卡,那么这款软件最终的归宿就是走向灭亡,所以 执行效率 对于编程来说是至关重要的,而这里的执行效率就对应的算法的时间复杂度。
1、单层循环
所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了(跑到)的意思。举个最简单的例子:
【例题1】给定 n ( n ≤ 1000 ) n(n \le 1000) n(n≤1000) 个元素 a i a_i ai,求其中 奇数 有多少个。
判断一个数是偶数还是奇数,只需要求它除上 2 的余数是 0 还是 1,那么我们把所有数都判断一遍,并且对符合条件的情况进行计数,最后返回这个计数器就是答案,这里需要遍历所有的数,这就是穷举。如图所示:

c/c++ 代码实现如下:
int countOdd(int n, int a[]) {int cnt = 0;for(int i = 0; i < n; ++i) {if(a[i] & 1)++cnt;}return cnt;
}
其中a & 1等价于a % 2,代码a模 2 的余数;而这个算法的时间复杂度就是 O ( n ) O(n) O(n)。
2、双层循环
经过上面的例子,相信你对穷举法已经有一定的理解,那么我们来看看稍微复杂一点的情况。
【例题2】给定 n ( n ≤ 1000 ) n(n \le 1000) n(n≤1000) 个元素 a i a_i ai,求有多少个二元组 ( i , j ) (i,j) (i,j),满足 a i + a j a_i + a_j ai+aj 是奇数 ( i < j ) (i \lt j) (i<j)。
我们还是秉承穷举法的思想,这里需要两个变量 i i i 和 j j j,所以可以枚举 a i a_i ai 和 a j a_j aj,再对 a i + a j a_i + a_j ai+aj 进行奇偶性判断,所以很快设计出一个利用穷举的算法。如图所示:

c/c++ 代码实现如下:
int countOddPair(int n, int a[]) {int cnt = 0;for(i = 0; i < n; ++i) {for(j = i+1; j < n; ++j) {if( (a[i] + a[j]) & 1)++cnt;}}return cnt;
}
而这个算法的时间复杂度就是 O ( n 2 ) O(n^2) O(n2)。简单来说,通过循环的嵌套次数,可以大致估计出一个算法的时间复杂度。
三、空间复杂度
而当我们在玩一个游戏的时候,这个游戏占据的内存越大,对我们的机器要求就越高,要求越高,用户自然就越少,所以内存的占用也是至关重要的,这正是对应的算法的空间复杂度。这里就不再展开了。
四、数据结构
选择合适的数据结构,在有效的权衡 时间复杂度 和 空间复杂度,设计出合适的算法来解决问题,这是我们编程设计需要思考的事情。
很多人问我,数据结构和算法 同 人工智能 中的那些算法有什么区别,两者有联系也有区别,前者是基础,每个学计算机的同学都应该掌握,在工作中会帮助你更好的理解问题,剖析原理。后者相对较难,如果不是将来要从事相关工作,可能基本用不到它。
为什么很多人学不好数据结构?原因就是没有从本质去理解数据结构的概念,任何一种算法都会对应一种数据结构。例如二分查找对应的是顺序表(因为不可能在链表上执行二分查找)、递归对应的是树、最短路对应的是图。
而核心的数据结构就只有三种:线性表、树、图。
再抽象一点,其实只有一种数据结构,就是图。
图就是由 顶点 和 边 构成的网络,像这样。如果一个图中任意两点间都可达,就叫连通图。从一个点经过若干的不重复边,回到自己,我们叫它圈,没有圈的图,实际上就是一棵树。
我们适当调整它的位置,就成了我们现实中的树,而把树的枝干剪掉,就变成了一个线性的结构,这就成了线性表。
平时上课的时候都是从 线性表 讲到 图,而当我们逆向思考发现,所有的数据结构,本质都是图。并且所有的数据结构按照存储方式,既可以用顺序的方式进行存储,也可以用链式的方式进行存储。
而 栈 和 队列 是两种线性表;树则根据分叉数量,可以是 二叉树、三叉树、四叉树、… ,其中 二叉树最为常见,二叉搜索树必须掌握,并且自己能够手写它的常见遍历;平衡二叉树是效率最高的二叉搜索树,平时没遇到是因为很多库都给你封装好了,像 C++ 中的 map 底层实现红黑树就是一种平衡二叉树,哈希表在冲突时拉链也有可能转化成平衡二叉树;堆则是一种完全二叉树,应用在优先队列中,如 C++ 中的 priority_queue;图主要分为有向图、无向图,其上的算法有很多,比较经典的是最短路和最小生成树。
五、校招算法题实在不会做,有没有关系?
这个问题,取决于你在准备的过程中是否尽力了,如果因为不会就放弃,躺平,那么关系很大;如果已经尽力了,还是做不出来,那可能真的是天赋的问题,这个是很难改善的,要通过后期巨大的努力才行,而目前很多校招算法题,一定是往难了出的,你会发现就算是面试官,在之前没有接触到这道题的时候,他也不见得能做出来,毕竟实际工作中,不会给你一道题,而是给你一个实际的问题,需要抽丝剥茧,逐渐将问题简化,最终通过合适的方法来解决它。
所以,如果你正在为这些校招的算法题不会做而焦虑,其实也不必太焦虑,用焦虑的时间尽量多写一点代码,如果算法学不好,可以尝试做一些小项目,例如俄罗斯方块,打砖块,三消这些小游戏,自己能写尽量自己写,在实现一个一个小游戏的时候,你会发现其中每一步都充斥着算法,只是没有那么生硬,会更好的理解和掌握相关的知识点。

能学一点是一点,基础的算法也就这么多了。

基础的数据结构

这两大块内容搞懂基本就OK了。
六、英雄算法集训
往期的算法集训,根据学员的反馈,一天一个算法实在太难吃透了,所以从六月集训开始,我们开始有针对性的去做训练,并不一定每个月要把所有算法学完,而是把会的算法学透,给大家充足的时间来学习和刷题。
每天的任务,主要分为以下几个步骤:
1、相关资料阅读;
2、观看星主刷题视频;
3、刷完星主布置的课后习题(每天1-4题);
4、在星球发布每日总结和复盘;
5、提交作业打卡;
九月的集训内容为基础算法。参加八月集训时,六七八月集训的所有内容均可 永久观看,并且承诺可以继续参加 和 十月、十一月 的集训(十二月以后的规划后续会放出,今天报名以后,同样可以参加)。所以这点可以放心,不用担心自己跟不上以后就再也跟不上了。八月集训的内容,已经归档,可以在 星球 随时查看。
相关文章:
校招算法题实在不会做,有没有关系?
文章目录 前言一、校招二、时间复杂度1、单层循环2、双层循环 三、空间复杂度四、数据结构五、校招算法题实在不会做,有没有关系?六、英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声,九月算法集训将于 09月01日 正式开始,目…...
Michael.W基于Foundry精读Openzeppelin第32期——SignatureChecker.sol
Michael.W基于Foundry精读Openzeppelin第32期——SignatureChecker.sol 0. 版本0.1 SignatureChecker.sol 1. 目标合约2. 代码精读2.1 isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) 0. 版本 [openzeppelin]:v4.8.3,[for…...
如何修改字符串内容?
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 String 1. 修改字符串2. StringBuilder和…...
pgadmin4中的备份与恢复
一,postgresql 数据的备份与恢复 (一)数据库备份与恢复 1,备份 windows环境 1> dump 逻辑备份 1,用管理员身份打开power shell 2,切换到本机 postgresql 安装目录下的 bin 目录: PS C…...
内网穿透——搭建私人影音媒体平台
文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…...
使用psql操作PostgreSQL数据库
postgresql的操作和mysql差别较大。。 可以使用 psql 命令行工具或者其他的 PostgreSQL 客户端工具来查看表。如下是使用 psql 命令行工具查看表的方法: 连接到 PostgreSQL 数据库: 如果一个PostgreSQL的连接为 postgresql://用户名:密码127.0.0.1:5432/…...
什么是网络取证(Network Forensics)
企业采用新技术来检查其网络安全是否存在零日漏洞,与立即指示问题的物理层不同,黑客攻击尝试可能会被忽视并变得严重,直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量,以查明问题或潜在问题的根源。 什么…...
农村农产品信息展示网站的设计与实现(论文+源码)_kaic
摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容,通过计算机网络的开发技术,在互联网上进行展示,然后通过计算机网…...
keepalived+lvs(DR)(四十六)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、作用 二、调度器配置 三、web节点配置 一、作用 使用keepalived解决lvs的单点故障 高可用集群 二、调度器配置 安装keepalived yum install -y k…...
从数据孤岛到企业xPA的演化
“数据孤岛”一直以来是企业在信息化进程中面临的比较头疼的问题,由于数据独立存在于不同部门之中,无法进行相互联动,致使数据库无法兼容,这无形中加大了跨部门合作的沟通成本。在此背景下,一种新兴的规划方法——扩展…...
视觉注意力收集
参考博文:神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_pynq 注意力机制_Bubbliiiing的博客-CSDN博客 【计算机视觉】详解 自注意力:Non-local 模块与 Self-attention (视觉注意力机制 (一))_自注意力模块_何处闻韶的博客-CS…...
StableVideo:使用Stable Diffusion生成连续无闪烁的视频
使用Stable Diffusion生成视频一直是人们的研究目标,但是我们遇到的最大问题是视频帧和帧之间的闪烁,但是最新的论文则着力解决这个问题。 本文总结了Chai等人的论文《StableVideo: Text-driven consistency -aware Diffusion Video Editing》ÿ…...
「快学Docker」Docker容器安全性探析
「快学Docker」Docker容器安全性探析 引言容器安全性威胁Docker容器安全性目录容器镜像安全性主机与容器隔离访问控制运行时监控与防御网络安全性Docker容器安全性最佳实践 总结 引言 在当今快速发展的软件开发和部署领域,容器化技术已经成为一种不可或缺的工具。然…...
鲍威尔“放鹰”,美联储或将再加息?
KlipC报道:美联储主席鲍威尔8月25日举行的杰克逊霍尔全球央行年会上表示,尽管过去一年通胀总体持续下行,但住房和服务通胀仍处于高位,鲍威尔也表达了通胀上行风险的担忧,多次表示可能会在适当的情形进一步加息。演讲结…...
docker go安装库失败
在 Docker 容器中使用 Go 获取包时超时,可能是由于网络问题或者是由于特定的网络限制。以下是一些建议和解决方法: 更改下载源: Go 默认使用 proxy.golang.org 作为模块代理。在某些地区或网络环境中,这可能会导致超时。你可以尝试更改 Go 的…...
利用python进行键盘模拟输入
记一次利用python模拟键盘输入,由于键盘中英文切换较为麻烦,所以写了两个小程序分别进行英文字符模拟或中文字符模拟。 #用于键盘英文字符输入模拟 import pyautogui import timedef simulate_typing(text):# Give some time to switch to the desired …...
2024年java面试(二)--spring篇
文章目录 1.spring事务传播机制2.spring事务失效原因3.Bean的生命周期4.Bean作用域5.依赖注入三种方式(Ioc的三种实现方式)6.实例化bean的三种方式7.IOC容器初始化加载Bean流程 1.spring事务传播机制 声明式事务虽然优于编程式事务,但也有不…...
cyclictest stress 工具 使用
工具介绍 1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟 2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行…...
天合翔宇荣获 HICOOL 2023 全球创业者大赛决赛二等奖
8 月 25 日晚,主题为“聚势创新 向光而行”的 HICOOL2023 全球创业者峰会开幕式,在中国国际展览中心(顺义馆)举行。北京市委书记尹力宣布开幕,市委副书记、市长殷勇致辞,市委副书记刘伟出席。 开幕式之后&…...
【LeetCode75】第三十五题 统计二叉树中好节点的数目
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 给我们一棵二叉树,让我们统计这棵二叉树中好节点的数目。 那么什么是好节点,题目中给出定义,从根节点…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
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…...
