鞍點

鞍點

中等

簡介

你打算在住家附近的樹林裡蓋一座樹屋,這樣就能欣賞日出和日落。

你從當地一家測量公司取得了資料,裡頭記錄了地圖上每個長方形區域中每棵樹的高度。 你需要分析地圖上的每個網格,找出適合蓋樹屋的好樹。

一棵好樹必須同時符合兩個條件:

  • 比東邊和西邊的每棵樹都高,這樣才能擁有觀賞日出和日落的最佳視野。
  • 比北邊和南邊的每棵樹都矮,以減少爬樹的力氣。

說明

你的任務是找出所有可能的地點,看看哪些樹適合讓你蓋樹屋。

資料公司提供的資料是一張張網格,網格中顯示了每棵樹的高度。 網格中橫向的列代表東西向,縱向的行代表南北向。

合格的樹會是它那一列中最大的,同時是它那一行中最小的。

一張網格可能完全沒有合格的樹。 也可能只有一棵,甚至好幾棵。

這裡有一張網格,裡面剛好只有一棵候選的樹。

      ↓
      1  2  3  4
    |-----------
  1 | 9  8  7  8
→ 2 |[5] 3  2  4
  3 | 6  6  7  1
  • 第 2 列的值是 5、3、2 和 4。最大的值是 5。
  • 第 1 行的值是 9、5 和 6。最小的值是 5。

所以[2, 1]這個位置(第 2 列、第 1 行)很適合蓋樹屋。

Rust 的索引從 0 開始

依照慣例,Rust 中有序的值序列,其內容編號(也就是「索引」)是從 0 開始的。無論這份 README 裡練習說明的其他部分怎麼寫,例如提到從 1 開始的索引,這個慣例都適用,因此你必須減去 1,才能把那些索引數字轉換成 Rust 的索引數字。

效率提醒

這個練習使用 向量的向量 來儲存矩陣的內容。雖然這個練習旨在幫助學生理解向量的一些基本概念,例如索引,以及巢狀資料型態是合法的,但對於高效能矩陣代數,以及任何類似的大量資料高效率處理來說,向量的向量 都不是理想的選擇。

關於這種效率不彰的詳細說明,超出了這個練習、乃至整個學習軌道的範圍。這個現象稱為快取區域性,如果你想進一步了解現代電腦架構的細節,可以點擊該連結,那裡有不錯的入門介紹。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Rust Exercism

準備好開始 鞍點 了嗎?

註冊 Exercism,透過 99 個練習 和真人引導來學習並精通 Rust,全部免費。