你打算在你家附近的树林里建一座树屋,这样就能看日出日落了。
你从当地一家测绘公司拿到了数据,这些数据显示了地图上每个矩形区域内每棵树的高度。 你需要分析地图上的每个网格,为你的树屋找出合适的好树。
一棵好树要同时满足两点:
你的任务是找出所有可以搭建树屋的潜在树木。
数据公司以网格的形式提供数据,网格中显示着每棵树的高度。 网格的行代表东西方向,列代表南北方向。
合格的树必须是它所在那一行中最大的,同时是它所在那一列中最小的。
一个网格里可能一棵合格的树都没有。 也可能有一棵,甚至好几棵。
下面这个网格里恰好有一棵候选的树。
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
所以[2, 1]这个点(行:2,列:1)是搭建树屋的绝佳位置。
按约定,Rust 中值的有序序列,其内容都是从 0 开始编号(也就是“下标”)的。无论本 README 中练习描述的其余部分怎么说,这一点都成立,比如描述里提到从 1 开始的下标时也是如此。所以,要把那些下标编号换算成 Rust 的下标编号,你得减去 1。
本练习使用_向量组成的向量_来存储矩阵的内容。本练习旨在帮助学生理解向量的一些基本概念(例如下标),以及嵌套数据类型是合法的,不过对于高性能的矩阵代数,以及任何类似的对大量数据进行高效处理的场景来说,_向量组成的向量_都不是最佳选择。
关于这种低效之处的详细解释,超出了本练习乃至整个学习路径的范围。这个方面叫做缓存局部性,如果你想进一步了解现代计算机体系结构的细节,点击那个链接就能找到一篇不错的入门介绍。