【華為OD】C卷真題 100%通過:攀登者1 ?C/C++源碼實現
目錄
題目描述:
示例1
代碼實現:
題目描述:
攀登者喜歡尋找各種地圖,并且嘗試攀登到最高的山峰。 地圖表示為一維數組,數組的索引代表水平位置,數組的高度代表相對海拔高度。其中數組元素0代表地面。 例如[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0], 代表如下圖所示的地圖,地圖中有兩個山脈位置分別為 1,2,3,4,5和8,9,10,11,12,13,最高峰高度分別為 4,3。最高峰位置分別為3,10。 一個山脈可能有多座山峰(高度大于相鄰位置的高度,或在地圖邊界且高度大于相鄰的高度)。
4+---+ | | | | 3 3 | | | +---+ ----- | | | | 2 | | 2 | | 2 | | | | +---+ | ----+ | +---+ | | | | | | 1 | | 1 1 | | 1 | | 1 | | | | | | +---+ +---+ +---+ +---+ +---+ | | | | 0 | | 0 0 | | 0 | | | | +---+ +-------+ +---+ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
登山時會消耗登山者的體力(整數),上山時,消耗相鄰高度差兩倍的體力,下坡時消耗相鄰高度差一倍的體力,平地不消耗體力,登山者體力消耗到零時會有生命危險。 例如,上圖所示的山峰,從索引0,走到索引1,高度差為1,需要消耗2X1=2的體力,從索引2高度2走到高度4索引3需要消耗2X2=4的體力。如果是從索引3走到索引4則消耗1X1=1的體力。
登山者想要知道一張地圖中有多少座山峰
示例1
輸入輸出示例僅供調試,后臺判題數據一般不包含示例
輸入
[0,1,4,3,1,0,0,1,2,3,1,2,1,0]
輸出
3
說明
山峰所在的索引分別為 2,10,12
代碼實現:
class Solution {
public:/*** 返回地圖中山峰的數量* @param hill_map int整形vector 地圖數據(長度大于1)* @return int整形*/int count_peaks(vector<int>& hill_map) {int count = 0;hill_map.push_back(0);hill_map.insert(hill_map.begin(), 0);int n = hill_map.size();for (int i = 1; i < n; ++i) {if (i + 1 < n) {if (hill_map[i] > hill_map[i + 1] && hill_map[i] > hill_map[i - 1]) {count++;}}}return count;}
};