校招算法之数组1:数组基础必备必掌握
校招不同于社招,不管是科班的大数据/计算机相关类专业的,还是其他专业转行大数据的小伙伴。同样大数据校招面试也是更看重基础(尤其是中大厂),校招不仅需要掌握大数据相关技术,还需要掌握一些基础知识(如计算机基础,算法数据结构),校招面试内容杂而多,如何系统化备战?
桐哥,壮哥,21年毕业研究生,目前在职快手,米哈游。俩人是校招收割机,校招拿到了美团,字节,快手,京东,滴滴,携程,小米,vivo,米哈游,好未来,小红书,garena,贝壳找房,招行,兴业银行等多家大中厂大数据校招Offer。现在趁着热乎劲,亲自带大家进行大数据校招学习。结合自身校招经历,亲自系列化总结大数据校招知识,剖析核心知识,系统化带大家备战校招,规划学习,考勤打卡。懒人模式--你只需要负责完成每天每周打卡学习即可,而不需要担心应该学习什么?

校招专题规划请看视频:

万里长征第一步,本周我们的小伙伴们在老师的带领下已经学习完了整个数组系列。

1. 刷题必需知识储备
掌握主流编程语言之一:C语言,C++,JAVA,或者Python等(建议使用java)
数组相关基础概念知识
2.数组基础知识概述
数组,作为互联网行业校招算法考察的重点,其基本操作是必须掌握的。数组的特性是可以通过下标访问元素,直接定义的数组需要指定数组长度且定义后长度不能修改,本文目的主要帮助大家熟悉数组的操作,为较基础的题目。
数组是在程序设计中,把具有相同类型的若干元素按有序的形式组织起来的一种形式。 数组 (Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素。
数组作为线性表的实现方式之一,数组中的元素在内存中是连续存储的,且每个元素占相同大小的内存。
注意:在不同的编程语言中,数组的实现方式具有一定差别。比如 C++ 和 Java 中,数组中的元素类型必须保持一致,而 Python 中则可以不同。相比之下,Python 中的数组(称为 list)具有更多的高级功能。
在笔面试过程中,一般需要重点掌握一维数组和二维数组的使用。
2.1一维数组
数组是存储在连续内存空间上的相同类型类型的集合,其通过索引(脚标)快速访问每个元素的值。在大多数编程语言中,脚标(索引)从 0 算起。数组是由相同类型的数据元素构成的有限集合,一维数组可以看作一个线性表。一维数组的元素有1个下标。

划重点咯:
数组下标都是从0开始的。
数组在内存空间的地址是连续的。
删除或者增添元素时难免要移动其他元素的地址。
2.2二维数组
二维数组也可以看作一个线性表X=(X0,X1,X2,…,Xn-1),只不过每一个数据元素Xi也是一个线性表。
二维数组的元素中有 2 个下标。如int a[3][2]的元素在内存中按行连续放置:

二维数组样式:

但无论是一维还是二维,数组是在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。
2.3 数组使用及优缺点
优点
1.按照索引查询元素速度快
2.按照索引遍历数组方便
缺点
1.数组的大小固定后就无法扩容了
2.数组只能存储一种类型的数据
3.添加,删除的操作慢,因为要移动其他的元素。
数组适用频繁查询,对存储空间要求不大,很少增加和删除的情况。这里的适用场景需要可以记忆一下,后续练习中会有体会哈。

3.数组基础题必掌握
数组的特性是可以通过下标访问元素,直接定义的数组需要指定数组长度且定义后长度不能修改,本节题目主要帮助大家熟悉数组的操作,为较基础的题目
1.加一(力扣66)
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
思路:
本题以数组的形式给定一个数字,数组中每个元素只存储单个数字。所以加1的操作自然是从数组的最后一位开始操作。主要考察数组的基本操作。
1.对数组最后一位开始加1操作;
2.需要判断是否进位操作-> 加1大于10则进位1,当前下标为0;加1小于10则不需要进位,直接+1即可;
3.继续对高位下标进行第2步操作
实现
2.最大连续1的个数(力扣485)
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
示例 1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
思路:
同样考察数组的基本操作,对数组中连续的1进行计数,并取最大的连续值。
实现
3.杨辉三角(力扣118)
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。示例 1:输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]杨辉三角其实就是高中学过的二项式系数的性质,规律如下图。

思路:使用两个for循环遍历数组元素,在外层循环中初始化每一个第二层数组的大小。在内层循环中,先将两侧的数组元素赋值为1,其他数值通过公式计算,然后输出数组元素。实现以下代码中包含两种方法,第一种是基本数组处理的方法,第二种递归方法较为推荐解决该类问题