当前位置: 首页 > news >正文

校招算法题实在不会做,有没有关系?

文章目录

    • 前言
    • 一、校招
    • 二、时间复杂度
      • 1、单层循环
      • 2、双层循环
    • 三、空间复杂度
    • 四、数据结构
    • 五、校招算法题实在不会做,有没有关系?
    • 六、英雄算法集训

前言

英雄算法联盟八月集训 已经接近尾声,九月算法集训将于 09月01日 正式开始,目前已经提前开启报名,报名方式见 这里,想要参加的建议提早报名,因为对于算法零基础的同学会有一些提前的准备工作,比如需要1 - 3天的时间完成预训练 和 九日集训 提前养成刷题的习惯,再参加算法集训会更加有成效。

一、校招

  对于校招,很多同学最惧怕的莫过于算法题了,因为很多题目,虽然感觉似曾相识,但是题型千变万化,加上紧张的氛围,原本会做的算法也不会了,从而和这次招聘失之交臂。
  那么算法在平时工作中,到底起多大的作用?是否一定要学呢?这个应该是绝大多数同学最困惑的问题,看完这篇文章,你的心中或许会有一定的答案。

二、时间复杂度

  但凡写过代码的同学都知道,如果一段代码执行效率低,那么在函数层层嵌套下,整个函数执行完的时间就会变长,就有可能出现未响应的情况。

  如果一个软件,每一步操作都非常耗时,给人的体验就是非常卡,那么这款软件最终的归宿就是走向灭亡,所以 执行效率 对于编程来说是至关重要的,而这里的执行效率就对应的算法的时间复杂度。

1、单层循环

  所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了(跑到)的意思。举个最简单的例子:

【例题1】给定 n ( n ≤ 1000 ) n(n \le 1000) n(n1000) 个元素 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(n1000) 个元素 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、双层循环 三、空间复杂度四、数据结构五、校招算法题实在不会做&#xff0c;有没有关系&#xff1f;六、英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日 正式开始&#xff0c;目…...

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]&#xff1a;v4.8.3&#xff0c;[for…...

如何修改字符串内容?

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; String 1. 修改字符串2. StringBuilder和…...

pgadmin4中的备份与恢复

一&#xff0c;postgresql 数据的备份与恢复 &#xff08;一&#xff09;数据库备份与恢复 1&#xff0c;备份 windows环境 1> dump 逻辑备份 1&#xff0c;用管理员身份打开power shell 2&#xff0c;切换到本机 postgresql 安装目录下的 bin 目录&#xff1a; PS C…...

内网穿透——搭建私人影音媒体平台

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…...

使用psql操作PostgreSQL数据库

postgresql的操作和mysql差别较大。。 可以使用 psql 命令行工具或者其他的 PostgreSQL 客户端工具来查看表。如下是使用 psql 命令行工具查看表的方法&#xff1a; 连接到 PostgreSQL 数据库&#xff1a; 如果一个PostgreSQL的连接为 postgresql://用户名:密码127.0.0.1:5432/…...

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞&#xff0c;与立即指示问题的物理层不同&#xff0c;黑客攻击尝试可能会被忽视并变得严重&#xff0c;直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量&#xff0c;以查明问题或潜在问题的根源。 什么…...

农村农产品信息展示网站的设计与实现(论文+源码)_kaic

摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容&#xff0c;通过计算机网络的开发技术&#xff0c;在互联网上进行展示&#xff0c;然后通过计算机网…...

keepalived+lvs(DR)(四十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、作用 二、调度器配置 三、web节点配置 一、作用 使用keepalived解决lvs的单点故障 高可用集群 二、调度器配置 安装keepalived yum install -y k…...

从数据孤岛到企业xPA的演化

“数据孤岛”一直以来是企业在信息化进程中面临的比较头疼的问题&#xff0c;由于数据独立存在于不同部门之中&#xff0c;无法进行相互联动&#xff0c;致使数据库无法兼容&#xff0c;这无形中加大了跨部门合作的沟通成本。在此背景下&#xff0c;一种新兴的规划方法——扩展…...

视觉注意力收集

参考博文&#xff1a;神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_pynq 注意力机制_Bubbliiiing的博客-CSDN博客 【计算机视觉】详解 自注意力&#xff1a;Non-local 模块与 Self-attention (视觉注意力机制 (一))_自注意力模块_何处闻韶的博客-CS…...

StableVideo:使用Stable Diffusion生成连续无闪烁的视频

使用Stable Diffusion生成视频一直是人们的研究目标&#xff0c;但是我们遇到的最大问题是视频帧和帧之间的闪烁&#xff0c;但是最新的论文则着力解决这个问题。 本文总结了Chai等人的论文《StableVideo: Text-driven consistency -aware Diffusion Video Editing》&#xff…...

「快学Docker」Docker容器安全性探析

「快学Docker」Docker容器安全性探析 引言容器安全性威胁Docker容器安全性目录容器镜像安全性主机与容器隔离访问控制运行时监控与防御网络安全性Docker容器安全性最佳实践 总结 引言 在当今快速发展的软件开发和部署领域&#xff0c;容器化技术已经成为一种不可或缺的工具。然…...

鲍威尔“放鹰”,美联储或将再加息?

KlipC报道&#xff1a;美联储主席鲍威尔8月25日举行的杰克逊霍尔全球央行年会上表示&#xff0c;尽管过去一年通胀总体持续下行&#xff0c;但住房和服务通胀仍处于高位&#xff0c;鲍威尔也表达了通胀上行风险的担忧&#xff0c;多次表示可能会在适当的情形进一步加息。演讲结…...

docker go安装库失败

在 Docker 容器中使用 Go 获取包时超时&#xff0c;可能是由于网络问题或者是由于特定的网络限制。以下是一些建议和解决方法&#xff1a; 更改下载源: Go 默认使用 proxy.golang.org 作为模块代理。在某些地区或网络环境中&#xff0c;这可能会导致超时。你可以尝试更改 Go 的…...

利用python进行键盘模拟输入

记一次利用python模拟键盘输入&#xff0c;由于键盘中英文切换较为麻烦&#xff0c;所以写了两个小程序分别进行英文字符模拟或中文字符模拟。 #用于键盘英文字符输入模拟 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.依赖注入三种方式&#xff08;Ioc的三种实现方式&#xff09;6.实例化bean的三种方式7.IOC容器初始化加载Bean流程 1.spring事务传播机制 声明式事务虽然优于编程式事务&#xff0c;但也有不…...

cyclictest stress 工具 使用

工具介绍 1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异&#xff0c;以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟 2.stress是Linux的一个压力测试工具&#xff0c;可以对CPU、Memory、IO、磁盘进行…...

天合翔宇荣获 HICOOL 2023 全球创业者大赛决赛二等奖

8 月 25 日晚&#xff0c;主题为“聚势创新 向光而行”的 HICOOL2023 全球创业者峰会开幕式&#xff0c;在中国国际展览中心&#xff08;顺义馆&#xff09;举行。北京市委书记尹力宣布开幕&#xff0c;市委副书记、市长殷勇致辞&#xff0c;市委副书记刘伟出席。 开幕式之后&…...

【LeetCode75】第三十五题 统计二叉树中好节点的数目

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一棵二叉树&#xff0c;让我们统计这棵二叉树中好节点的数目。 那么什么是好节点&#xff0c;题目中给出定义&#xff0c;从根节点…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...