返回目录

题目描述

攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。

地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素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。

一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。

image.png

登山者想要知道一张地图中有多少座山峰。

输入描述

输入为一个整型数组,数组长度大于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));
    }
}
最后修改:2024 年 04 月 02 日
如果觉得我的文章对你有用,请随意赞赏