返回目录
题目描述
攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。
地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素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。
一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。
登山者想要知道一张地图中有多少座山峰。
输入描述
输入为一个整型数组,数组长度大于1。
输出描述
输出地图中山峰的数量。
输入 | 0,1,4,3,1,0,0,1,2,3,1,2,1,0 |
---|---|
输出 | 3 |
说明 | 山峰所在索引分别为3,10,12 |
Python算法源码
def get_result(heights):
count = 0
# 遍历高度列表
for i in range(len(heights)):
# 获取当前高度左侧和右侧的高度
left_height = heights[i - 1] if i - 1 >= 0 else 0
right_height = heights[i + 1] if i + 1 < len(heights) else 0
# 判断当前高度是否比左右两侧高度都高,如果是则计数加一
if heights[i] > left_height and heights[i] > right_height:
count += 1
return count
# 从输入中获取高度列表
heights = list(map(int, input().split(',')))
# 调用函数并输出结果
print(get_result(heights))
C算法源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义函数,计算符合条件的高度数量
int getResult(int h[], int size) {
int count = 0;
// 遍历数组
for (int i = 0; i < size; i++) {
int leftH = (i - 1 >= 0) ? h[i - 1] : 0;
int rightH = (i + 1 < size) ? h[i + 1] : 0;
// 如果当前高度大于左右两侧高度,则计数加一
if (h[i] > leftH && h[i] > rightH) {
count++;
}
}
return count;
}
// 主函数
int main() {
int heights[100];
int size = 0;
char input[100];
// 从标准输入读取并解析高度数组
fgets(input, 100, stdin);
char *token = strtok(input, ",");
while (token != NULL) {
heights[size++] = atoi(token);
token = strtok(NULL, ",");
}
// 调用函数并输出结果
printf("%d\n", getResult(heights, size));
return 0;
}
Java算法源码
import java.util.*;
public class Main {
// 定义函数,计算符合条件的高度数量
public static int getResult(int[] h) {
int count = 0;
// 遍历数组
for (int i = 0; i < h.length; i++) {
int leftH = (i - 1 >= 0) ? h[i - 1] : 0;
int rightH = (i + 1 < h.length) ? h[i + 1] : 0;
// 如果当前高度大于左右两侧高度,则计数加一
if (h[i] > leftH && h[i] > rightH) {
count++;
}
}
return count;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 从标准输入读取并解析高度数组
int[] heights = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
// 调用函数并输出结果
System.out.println(getResult(heights));
}
}
4 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]