山峰数组的TOP

这篇博客介绍了如何在给定的整数数组中找到满足特定条件的山峰(峰顶)下标,即数组先升后降的局部峰值。通过实例演示和简单二分查找方法,提供了Python代码实现。适合理解峰数组定义并寻求解决方案的开发者。

LeetCode每日一题(2021.10.14)【EASY】

符合下列属性的数组 arr 称为 山峰数组(山脉数组) :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:
arr[0] < arr[1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1]
给定由整数组成的山峰数组 arr ,返回任何满足 arr[0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] 的下标 i ,即山峰顶部。

示例 1:
输入:arr = [0,1,0]
输出:1

示例 2:
输入:arr = [1,3,5,4,2]
输出:2

示例 3:
输入:arr = [0,10,5,2]
输出:1

示例 4:
输入:arr = [3,4,5,1]
输出:2

示例 5:
输入:arr = [24,69,100,99,79,78,67,36,26,19]
输出:2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/B1IidL

简单的方法

return arr.index(max(arr))

试试二分 :)

class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        n = len(arr)
        left,mid,right = 0,0,n-1
        while int((left + right)/2) != mid:
            mid = int((left+right)/2)
            if arr[mid] < arr[mid-1]:
                right = mid
            if arr[mid] < arr[mid+1]:
                left = mid
        return mid
山峰数组是一种特殊的数组,其特点是存在一个唯一的“山峰”元素,山峰前后的数值分别呈单调递增和单调递减的趋势。以下是关于山峰数组统计的方法和相关知识: ### 查找山峰索引 可以使用二分查找来高效地找到山峰数组中“山峰”元素的索引。二分查找的核心思想是根据 `arr[mid]` 与 `arr[mid + 1]` 之间的大小关系来确定二分搜索的区间选择。若 `arr[mid] < arr[mid + 1]`,说明山峰在 `mid` 的右侧,更新左边界 `l = mid + 1`;反之,说明山峰在 `mid` 或其左侧,更新右边界 `r = mid`。以下是实现该功能的 Java 代码: ```java class Solution { public int peakIndexInMountainArray(int[] arr) { int l = 0, r = arr.length - 1; while (l < r) { int mid = l + r >> 1; if (arr[mid] < arr[mid + 1]) l = mid + 1; else r = mid; } return l; } } ``` ### 统计可见山峰对 可见山峰对指的是数组中满足特定条件的元素对。对于数组中的元素对,如果它们之间的任意元素都不大于这两个元素中较小的那个,则认为这两个元素构成一个可见山峰对。在统计时,需要考虑邻居元素对和非邻居元素对。例如,对于数组 `1 3 4 5 2`,邻居元素对有 5 对,非邻居元素对中满足可见山峰对定义的有 `23`、`35`,总共有 7 对 [^2]。 ### 数组创建与使用 在处理山峰数组统计问题时,通常需要先创建数组来存储数据。可以使用不同的方式创建数组,如指定长度让系统给出默认值,或直接传入元素让系统指定长度。以下是 Java 中创建数组的示例代码: ```java public class ArrayDemo01 { public static void main(String[] args) { // 创建int类型的数组,用来存储3个元素,指定长度,由系统给出默认值 int[] arr1 = new int[3]; // 推荐 int arr2[] = new int[3]; // 创建int类型的数组,存储数据`11, 22, 33`,直接传入元素,由系统指定长度 int[] arr3 = new int[]{11, 22, 33}; int[] arr4 = {11, 22, 33}; // 推荐 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值