OD统一考试
分值: 100分
题解: Java / Python / C++
给定一个数组,数组中的每个元素代表该位置的海拔高度。0表示平地,>=1时表示属于某个山峰,山峰的定义为当某个位置的左右海拔均小于自己的海拔时,该位置为山峰。数组起始位置计算时可只满足一边的条件。
一个整数数组
输出符合条件的山峰的个数
输入:
[0,1,2,3,2,4]
输出:
2
输入:
[3,0,3,4,1]
输出:
2
简单模拟题。
解题思路
- 使用一个计数器
cnt
记录符合条件的山峰数量。- 遍历数组,对于每个位置,判断是否满足山峰条件,即左右两侧的海拔均小于自身。
- 如果满足条件,则增加计数器
cnt
。- 最终返回
cnt
作为结果。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int validMountainCount(vector<int>& arr) {
int n = arr.size(), cnt = 0;
for(int i = 0; i < n; i++) {
// 左右海拔均小于自己的海拔时
if((i == 0 || arr[i-1] < arr[i]) && (i + 1 == n || arr[i] > arr[i+1])) cnt++;
}
return cnt;
}
};
int main() {
Solution solution;
vector<int> arr1{0,1,2,3,2,4};
cout<< solution.validMountainCount(arr1) <<endl;
vector<int> arr2{3,0,3,4,1};
cout<< solution.validMountainCount(arr2) <<endl;
return 0;
}
public class Solution {
public int validMountainCount(int[] arr) {
int n = arr.length;
int cnt = 0;
for (int i = 0; i < n; i++) {
// 左右海拔均小于自己的海拔时
if ((i == 0 || arr[i - 1] < arr[i]) && (i + 1 == n || arr[i] > arr[i + 1])) {
cnt++;
}
}
return cnt;
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] arr1 = {0, 1, 2, 3, 2, 4};
System.out.println(solution.validMountainCount(arr1));
int[] arr2 = {3, 0, 3, 4, 1};
System.out.println(solution.validMountainCount(arr2));
}
}
from typing import List
class Solution:
def validMountainCount(self, arr: List[int]) -> int:
n, cnt = len(arr), 0
for i in range(n):
# 左右海拔均小于自己的海拔时
if (i == 0 or arr[i - 1] < arr[i]) and (i + 1 == n or arr[i] > arr[i + 1]):
cnt += 1
return cnt
# 示例用法
solution = Solution()
arr1 = [0, 1, 2, 3, 2, 4]
print(solution.validMountainCount(arr1))
arr2 = [3, 0, 3, 4, 1]
print(solution.validMountainCount(arr2))
整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。
#校招##秋招##面经##华为##java#