前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >脚撕LeetCode(852)Easy

脚撕LeetCode(852)Easy

作者头像
用户6203048
发布2022-01-18 08:26:30
1820
发布2022-01-18 08:26:30
举报
文章被收录于专栏:JathonKatuJathonKatu

题目地址:https://leetcode-cn.com/problems/peak-index-in-a-mountain-array/

符合下列属性的数组 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 。

代码语言:javascript
复制
示例 1:
输入:arr = [0,1,0] 
输出:1
示例 2:
输入:arr = [0,2,1,0] 
输出:1
示例 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
提示:
3 <= arr.length <= 104 
0 <= arr[i] <= 106 
题目数据保证 arr 是一个山脉数组 

进阶: 很容易想到时间复杂度 O(n) 的解决方案,你可以设计一个 O(log(n)) 的解决方案吗?

这道题的题意:给你一个数组,数组length>=3,并且他是一个山峰数组,也就是说有一个下标的元素左边是递增右边是递减,这个元素就是整个数组的最大值,请找出这个元素的下标。进阶log(n)其实就是考虑二分法或者更多的一个提醒。

一、爆破法

我们的爆破法也很简单,直接在二分找到中间的那个数,如果他左边右边都小于他就直接返回,否则,如果他左边小于他,说明右边大于它,那么left指针就只想mountain指针,否则说明左边大于它,那么right指针指向mountain指针

执行结果如下:

34 / 34 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 38.5 MB

代码语言:javascript
复制
public int peakIndexInMountainArrayMe(int[] arr) {
    int l = 0,r = arr.length;
    int mountain = 0;
    while (l<r){
        mountain = (l+r) / 2 ;
        if(arr[mountain-1] < arr[mountain] && arr[mountain] > arr[mountain+1]) break;
        if(arr[mountain-1] < arr[mountain]) l = mountain;
        else r = mountain;
    }
    return mountain;
}

二、评论区大佬:三分法

三分法和二分法类似,只不过分成三等分

执行结果如下:

34 / 34 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 38.7 MB

代码语言:javascript
复制
public int peakIndexInMountainArray(int[] arr) {
    int left = 1, right = arr.length - 1;
    while (left < right) {
        int m = (right - left) / 3;
        int m1 = left + m, m2 = right - m;
        if (arr[m1] > arr[m2])
            right = m2 - 1;
        else
            left = m1 + 1;
    }
    return left;
}

总的来说,这道题主题主要是找到最大值,一开始想过先排序,但是排序后很明显就无法返回下标了。

next。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档