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

news2024/11/26 14:43:57

文章目录

    • 前言
    • 一、校招
    • 二、时间复杂度
      • 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.coloradmin.cn/o/938763.html

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

相关文章

【uniapp】this有时为啥打印的是undefined?(箭头函数修改this)

&#x1f609;博主&#xff1a;初映CY的前说(前端领域) ,&#x1f4d2;本文核心&#xff1a;uniapp中this指向问题 前言&#xff1a;this大家知道是我们当前项目的实例&#xff0c;我们可以在这个this上面拿到我们原型上的全部数据。这个常用在我们在方法中调用其他方法使用。 …

java-什么是 CAS( 比较并交换-乐观锁机制-锁自旋)

1.什么是 CAS&#xff08; 比较并交换-乐观锁机制-锁自旋&#xff09; 1.1. 概念及特性 CAS&#xff08;Compare And Swap/Set&#xff09;比较并交换&#xff0c;CAS 算法的过程是这样&#xff1a;它包含 3 个参数CAS(V,E,N)。V 表示要更新的变量(内存值)&#xff0c;E 表示…

el-date-picker限制选择的时间范围

<el-date-pickersize="mini"v-model="dateTime"value-format="yyyy-MM-dd HH:mm:ss"type="datetimerange"range-separator="~"start-placeholder="开始日期"end-placeholder="结束日期":picker-opti…

零信任体系化能力建设(5):数据安全与控制跟踪

在数字化世界中&#xff0c;一切皆源于数据。无论任何时候、任何地方和任何环境&#xff0c;组织都需要保护数据免受未经授权的访问和泄露&#xff0c;确保核心资产和业务的连续性&#xff0c;并获得客户的信任和忠诚度。 然而&#xff0c;这些跨领域、相互交叉的数据来自于不…

探索昏暗光线下人脸检测,基于YOLOv5[n/s/m/l/x]全系列模型开发构建人脸检测系统,对比分析精度效果

昏暗光线下的目标检测是一个比较小众的场景&#xff0c;之前也有读过一些相关的论文&#xff0c;专门有论文基于这个场景去开发算法模型&#xff0c;目的就是基于这种特定的场景实现性能的提升&#xff0c;那么原生的模型在这种程度的数据下能有什么样的表现效果呢&#xff1f;…

ssm彩妆小样售卖商城源码和论文

ssm彩妆小样售卖商城源码和论文073 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&…

Studio One 6.2.0(音乐制作)

Studio One 6 是一款音乐制作软件&#xff0c;具有以下特色&#xff1a; 直观的用户界面&#xff1a;Studio One 6采用了现代化的设计&#xff0c;使得用户可以轻松地浏览和操作软件。它拥有直观的工作流程和易于使用的功能&#xff0c;适合初学者和专业人士。 多轨道录音和混…

从RocketMQ通信模块聊聊EpollEventLoopGroup和NioEventLoopGroup

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 最近在排查RocketMQ一个网络问题的时候&#xff0c;排查到了Netty相关的处理&#xff0c;然后看到了RocketMQ在构建workGroup的时候&#xff0c;发现了有如…

Java中word转Pdf工具类

背景&#xff1a; 最近做的一个项目中&#xff0c;对于word转Pdf用的地方很多&#xff0c;特此记录 搭建总图&#xff1a; 代码部分&#xff1a; 1.需要的jar包&#xff1a; aspose-words-15.8.0-jdk16.jar 注&#xff1a;下载好这个jar包后&#xff0c;在项目的根目录新建一…

css3英文文字换行,超过两行...展示

需求&#xff1a;超过两行...展示 开发的过程中发现div内容中文可以换行英文不换行&#xff0c;导致长度会溢出。 是英文全英文的话浏览器会解析成一个单词&#xff0c; 加上这句就好了 word-break:break-all; 一开始不知道是会解析成一个单词&#xff0c;用字符串拼接处理…

在云原生时代,构建高效的大数据存储与分析平台

文章目录 1. **选择适当的数据存储技术&#xff1a;**2. **采用分布式架构&#xff1a;**3. **数据分区和索引&#xff1a;**4. **采用列式存储&#xff1a;**5. **数据压缩和编码&#xff1a;**6. **使用缓存技术&#xff1a;**7. **数据分片和复制&#xff1a;**8. **自动化运…

水库大坝北斗RTK位移自动监测系统方案

一、方案背景 我国已拥有水库大坝9.8万余座&#xff0c;其中95%以上为土石坝&#xff0c;95%以上是上个世纪80年代以前建设的老坝。虽然近10年来我国进行了大规模的病险水库除险加固&#xff0c;但水库大坝数量多&#xff0c;土石坝多&#xff0c;出险的几率非常高。大坝作为一…

基于微信小程序的文化宣传平台的设计与实现(Java+spring boot+微信小程序+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的文化宣传平台的设计与实现&#xff08;Javaspring boot微信小程序MySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java…

ESP32应用教程(0)— PMW3901MB光流传感器

文章目录 前言 1 传感器介绍 1.1 关键特征 1.2 关键参数 2 硬件概述 2.1 信号引脚 2.2 参考电路图 3 寄存器 3.1 寄存器列表 3.2 性能优化寄存器 4 代码说明 4.1 结构体说明 4.2 编译说明 5 波形分析 前言 本文介绍了在 ESP32 DEVKIT V1 开发板上开发 PMW3901MB…

C语言——pow(base, exponent)函数,求幂

这段代码是用来计算底数的指数幂的程序。它使用了math.h头文件中的pow函数来进行幂运算&#xff0c;并使用printf函数来输出结果。 在程序中&#xff0c;使用pow(base, exponent)来计算底数base的exponent次幂&#xff0c;并将结果存储在result变量中。然后使用printf函数来输…

JDBC驱动程序类型

JDBC驱动程序类型 JDBC驱动程序类型列表类型1 JDBC驱动程序类型2 JDBC驱动程序类型3 JDBC驱动程序类型4 JDBC驱动程序 JDBC驱动程序是一组Java类&#xff0c;用于实现JDBC接口&#xff0c;目标是特定的数据库。JDBC接口带有标准Java&#xff0c;但这些接口的实现是特定于您需…

Mycat教程+面试+linux搭建

目录 一 MyCAT介绍 二 常见的面试题总结 三 linux下搭建Mycat 一 MyCAT介绍 1.1. 什么是MyCAT&#xff1f; 简单的说&#xff0c;MyCAT就是&#xff1a; 一个彻底开源的&#xff0c;面向企业应用开发的“大数据库集群” 支持事务、ACID、可以替代Mysql的加强版数据库 一个可…

QQ六七年前的聊天记录怎么找?3招教你找回并恢复

友友们&#xff0c;六七年前的QQ聊天记录还有办法恢复吗&#xff1f;我之前的手机还能用&#xff0c;但是登录QQ后没有找到我想要的聊天信息&#xff0c;有没有其他方法能够找回&#xff1f; QQ聊天记录找不回来是一个非常困扰大家的问题。特别是好几年前的聊天记录&#xff0c…

SLAM从入门到精通(CMake编译)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 linux系统里面的编译和windows下面的编译不同&#xff0c;它没有什么特别好用的IDE。一般都需要自己写编译脚本。这项工作在以前可能很麻烦&#x…

cmd: Union[List[str], str], ^ SyntaxError: invalid syntax

跑项目在调用from easyprocess import EasyProcess 遇到报错&#xff1a; cmd: Union[List[str], str], ^ SyntaxError: invalid syntax猜测是EasyProcess版本与python版本不对应 pip show EasyProcess查证一下&#xff1a; WARNING: pip is being invoked by an old…