华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定一个数组,数组中的每个元素代表该位置的海拔高度。0表示平地,>=1时表示属于某个山峰,山峰的定义为当某个位置的左右海拔均小于自己的海拔时,该位置为山峰。数组起始位置计算时可只满足一边的条件。
二、输入描述
一个整数数组。
三、输出描述
输出符合条件的山峰的个数。
1、输入
[0,1,2,3,2,4]
2、输出
2
四、解题思路
- 遍历数组中的每个位置,判断是否符合山峰的定义。
- 对于每个位置,判断其是否大于左右两侧的海拔高度,如果是,则该位置是山峰。
- 特别注意数组的起始位置,起始位置的山峰只需满足右侧的条件即可。
- 统计符合条件的山峰的个数并输出。
五、Java算法源码
public class OdTest01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数数组
String input = scanner.nextLine();
String[] inputs = input.substring(1,input.length()-1).split(",");
int[] heights = new int[inputs.length];
for (int i = 0; i < inputs.length; i++) {
heights[i] = Integer.parseInt(inputs[i]);
}
// 统计符合条件的山峰的个数
int count = countPeaks(heights);
// 输出结果
System.out.println(count);
}
// 统计符合条件的山峰的个数
private static int countPeaks(int[] heights) {
int count = 0;
// 判断起始位置是否是山峰
if (heights.length > 1 && heights[0] > heights[1]) {
count++;
}
// 判断中间位置是否是山峰
for (int i = 1; i < heights.length - 1; i++) {
if (heights[i] > heights[i - 1] && heights[i] > heights[i + 1]) {
count++;
}
}
// 判断最后一个位置是否是山峰
if (heights.length > 1 && heights[heights.length - 1] > heights[heights.length - 2]) {
count++;
}
return count;
}
}
六、效果展示
1、输入
[3,0,3,4,1]
2、输出
2
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。