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

文章目录

    • 前言
    • 一、校招
    • 二、时间复杂度
      • 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、提交作业打卡;

  九月的集训内容为基础算法。参加八月集训时,六七八月集训的所有内容均可 永久观看,并且承诺可以继续参加 和 十月、十一月 的集训(十二月以后的规划后续会放出,今天报名以后,同样可以参加)。所以这点可以放心,不用担心自己跟不上以后就再也跟不上了。八月集训的内容,已经归档,可以在 星球 随时查看。

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

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

相关文章

.NET 8 Preview 7 中的 ASP.NET Core 更新

作者&#xff1a;Daniel Roth 排版&#xff1a;Alan Wang .NET 8 Preview 7 现在已经发布&#xff0c;其中包括了对 ASP.NET Core 的许多重要更新。 以下是预览版本中新增功能的摘要&#xff1a; 服务器和中间件 防伪中间件 API 编写 最小 API 的防伪集成 Native AOT 请求委托…

市值暴跌后,每日优鲜能否靠2亿融资“续命”?

濒临破产退市的每日优鲜&#xff0c;靠转型实现“自救”&#xff1f; 作为“生鲜电商第一股”&#xff0c;每日优鲜在上市1年后爆发生存危机。 8月4日&#xff0c;每日优鲜(NDAQ:MF)公布了2022年报&#xff0c;尽管去年7月其宣布关闭营收占比约90%的DWM业务&#xff0c;全面终…

【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

RK3568 安卓源码编译

一.repo安卓编译工具 项目模块化/组件化之后各模块也作为独立的 Git 仓库从主项目里剥离了出去&#xff0c;各模块各自管理自己的版本。Android源码引用了很多开源项目&#xff0c;每一个子项目都是一个Git仓库&#xff0c;每个Git仓库都有很多分支版本&#xff0c;为了方便统…

gradio使用transformer模块demo介绍2:Images Computer Vision

文章目录 图像分类 Image Classification图像分割 Image Segmentation图像风格变换 Image Transformation with AnimeGAN3D模型 3D models 图像分类 Image Classification import gradio as gr import torch import requests from torchvision import transformsmodel torch.…

【Unity3D赛车游戏】【六】如何在Unity中为汽车添加发动机和手动挡变速?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【【STM32分析IO该设置什么模式的问题】】

STM32分析IO该设置什么模式的问题 我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉&#xff0c;但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以…

龙芯2K1000LA移植交叉编译环境以及QT

嵌入式大赛结束了&#xff0c;根据这次比赛中记的凌乱的笔记&#xff0c;整理了一份龙芯2K1000LA的环境搭建过程&#xff0c;可能笔记缺少了一部分步骤或者错误&#xff0c;但是大致步骤可以当作参考。 一、交叉编译工具链 下载连接&#xff1a;龙芯 GNU 编译工具链 | 龙芯开…

几个nlp的小项目(文本分类)

几个nlp的小项目(文本分类) 导入加载数据类、评测类查看数据集精确展示数据测评方法设置参数tokenizer,token化的解释对数据集进行预处理加载预训练模型进行训练设置训练模型的参数一个根据任务名获取,测评方法的函数创建预训练模型开始训练本项目的工作完成了什么任务?导…

Flask 单元测试

如果一个软件项目没有经过测试&#xff0c;就像做的菜里没加盐一样。Flask 作为一个 Web 软件项目&#xff0c;如何做单元测试呢&#xff0c;今天我们来了解下&#xff0c;基于 unittest 的 Flask 项目的单元测试。 什么是单元测试 单元测试是软件测试的一种类型。顾名思义&a…

redis--集群

redis集群 Redis 集群是一种用于分布式存储和管理数据的解决方案&#xff0c;它允许将多个 Redis 实例组合成一个单一的逻辑数据库&#xff0c;提供更高的性能、容量和可用性。 redis集群的优点 高可用性&#xff1a; Redis集群使用主从复制和分片技术&#xff0c;使得数据可…

centos7安装hadoop 单机版

1.解压 &#xff08;1&#xff09;将hadoop压缩包复制到/opt/software路径下 &#xff08;2&#xff09;解压hadoop到/opt/module目录下 [rootkb135 software]# tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ &#xff08;3&#xff09;修改hadoop属主和属组 [rootkb135 m…

MySQL索引 事物 存储引擎

一 索引 索引的概念 索引就是一种帮助系统能够更快速的查找信息的结构 索引的作用 索引的副作用 创建索引的规则 MySQL的优化 哪些字段/场景适合创建索引 哪些不适合 小字段唯一性强的字段更新不频繁&#xff0c;但查询率比较高的字段表记录超过 300行主键&#xff0c;外键…

【HCIP】15.MPLS基础

多协议标签交换 MPLS位于TCP/IP协议栈中的数据链路层和网络层之间&#xff0c;可以向所有网络层提供服务。 通过在数据链路层和网络层之间增加额外的MPLS头部&#xff0c;基于MPLS头部实现数据快速转发。 术语 MPLS域&#xff08;MPLS Domain&#xff09;&#xff1a;一系列…

【AndroidStudio】java.nio.charset.MalformedInputException: Input length = 1

java.nio.charset.MalformedInputException: Input length 1 可以参考这个文章处理下编码格式&#xff1a;https://blog.csdn.net/twotwo22222/article/details/124605029java.nio.charset.MalformedInputException: Input length 1是因为你的配置文件里面有中文或者是你的编…

Docker 将容器打包成镜像推送镜像到仓库

Docker 将容器打包成镜像&推送镜像到仓库 一、将容器打包成镜像 $ docker commit <容器ID> <镜像名称:标签>示例&#xff1a; $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

Qt 自定义菜单 托盘菜单

托盘菜单实现&#xff1a;通过QSystemTrayIconQMenuQAction即可完美实现&#xff01; 实现方式&#xff1a;createActions用于创建菜单、菜单项,translateActions用于设置文本、实现多语化&#xff0c;translateAccount用于设置用户空间配额。 void TrayMenu::createActions(…

基于Pytorch的神经网络部分自定义设计

一、基础概念&#xff08;学习笔记&#xff09; &#xff08;1&#xff09;训练误差和泛化误差[1] 本质上&#xff0c;优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标&#xff0c;后者则关注在给定有限数据量的情况下寻找合适的模型。训练误差和泛化误差通常不…

WinPlan经营大脑:精准预测,科学决策,助力企业赢得未来

近年,随着国内掀起数字化浪潮,“企业数字化转型”成为大势所趋下的必选项。但数据显示,大约79%的中小企业还处于数字化转型初期,在“企业经营管理”上存在着巨大的挑战和风险。 WinPlan经营大脑针对市场现存的企业经营管理难题,提供一站式解决方案,助力企业经营管理转型…

webassembly001 webassembly简述

WebAssembly 官方地址:https://webassembly.org/相关历史 https://en.wikipedia.org/wiki/WebAssembly https://brendaneich.com/2015/06/from-asm-js-to-webassembly/WebAssembly&#xff08;缩写为Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为编…