
一起动脑筋 · 先看一个小故事
一周的气温要找最高、算平均,还要看看哪天升温了。把它们按日期排成一组,能反复使用。
把过程摊开来看
- 保存每天一个位置
- 找最高逐个比较
- 求平均累加后除以天数
- 看变化比较相邻两天
数组的价值不只是放很多数,还在于保留每个位置的意义。
如果位置对应日期,就能比较相邻日;若随意排序,原来的日期关系会丢失,除非另存对应信息。
01数组为什么在算法里这么重要?
很多题目的本质都是:给你一组数据,让你从中找到规律或计算结果。
数组正好可以把这组数据按顺序保存下来。
02问题一:统计
例如统计有多少个及格成绩:
int count = 0;
for (int score : scores) {
if (score >= 60) {
count++;
}
}
数组 + 循环 + 条件判断,就能解决一类统计问题。
03问题二:查找
例如寻找有没有目标数字:
bool found = false;
for (int value : a) {
if (value == target) {
found = true;
break;
}
}
04问题三:最大值、最小值、总和
最大值
不断比较并更新。
最小值
不断比较并更新。
总和
逐个累加。
这些都是最基础的“遍历数组”模式。
05问题四:排序
如果要把数组从小到大排列,就需要排序算法。
后面的“基础算法”专题会学习为什么排序不仅是“换位置”,还涉及算法效率。
06问题五:二维地图和棋盘
二维数组可以表示:
迷宫
每格记录墙或道路。
棋盘
每格记录棋子状态。
地图
每格记录地形。
矩阵
每格记录一个数。
07数组还能引出哪些更高级的方法?
以后会继续遇到:
- 前缀和
- 二分查找
- 排序
- 双指针
- 动态规划中的状态表
- 图算法里的邻接结构
很多高级算法,最终仍然会回到“怎样组织和访问一组数据”。
08学数组最重要的是什么?
你已经知道了什么
- 数组是算法学习的核心基础结构。
- 统计、查找、求和、最大最小都可以通过遍历数组完成。
- 二维数组能表示网格、棋盘和矩阵。
- 排序、二分、前缀和等更高级算法也大量依赖数组。
- 学习数组的重点是理解数据组织和访问过程,而不是死背模板。
本专题完成:下一专题进入“函数与程序结构”。
轮到你来试一试
为了找最高温,把气温排序后,还能直接把第一个位置当星期一吗?
想好了吗?点开看解释
不能。排序改变了位置;要知道最高温在哪天,应保留日期或记录原下标。