女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

一周的气温要找最高、算平均,还要看看哪天升温了。把它们按日期排成一组,能反复使用。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 保存每天一个位置
  2. 找最高逐个比较
  3. 求平均累加后除以天数
  4. 看变化比较相邻两天

数组的价值不只是放很多数,还在于保留每个位置的意义。

如果位置对应日期,就能比较相邻日;若随意排序,原来的日期关系会丢失,除非另存对应信息。

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学数组最重要的是什么?

你已经知道了什么

  • 数组是算法学习的核心基础结构。
  • 统计、查找、求和、最大最小都可以通过遍历数组完成。
  • 二维数组能表示网格、棋盘和矩阵。
  • 排序、二分、前缀和等更高级算法也大量依赖数组。
  • 学习数组的重点是理解数据组织和访问过程,而不是死背模板。

本专题完成:下一专题进入“函数与程序结构”。

轮到你来试一试

为了找最高温,把气温排序后,还能直接把第一个位置当星期一吗?

想好了吗?点开看解释

不能。排序改变了位置;要知道最高温在哪天,应保留日期或记录原下标。