编程练习随笔----寻找峰值


寻找峰值这个题,牛客网的要求的是索引最大的那个山峰元素的索引,也就是最后一个山峰的索引,而leetcode上的只要它是山峰就行,思想都是一样的

题目描述(牛客)

山峰元素是指其值大于或等于左右相邻值的元素。
给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。
找到索引最大的那个山峰元素并返回其索引。
假设 nums[-1] = nums[n] = -∞。

https://www.nowcoder.com/practice/1af528f68adc4c20bf5d1456eddb080a?tpId=196&tqId=37165&rp=1&ru=%2Fta%2Fjob-code-total&qru=%2Fta%2Fjob-code-total%2Fquestion-ranking&tab=answerKey
本题所求的是山峰元素中索引最大的那个索引,所以逆序向前找会更快找到。
再进一步分析:
1、若a[n-1]>a[n-2],即最后一个元素就是山峰元素,此时最大索引就是n-1;
2、若a[n-1]<a[n-2],即倒数第二个元素可能是山峰元素,此时,继续比较a[n-2]与a[n-3]的大小即可找出山峰元素或者可能的山峰元素;
综上所述,找山峰元素时,只需当前元素与它之前的元素两两比较,就可以确定它是山峰元素或者它之前的元素可能是山峰元素,而无需判断当前元素比它前后的元素都大。
也就是说,我们的判断逻辑是:从最后一个元素开始,若它之前的元素小于它,则他就是一个山峰元素,且它的索引是我们所求的索引;反之,它之前的元素可能是山峰元素,在判断它之前的元素是否小于它,小于则它是山峰元素。
a[n-1]即为山峰元素
在这里插入图片描述
a[n-2]为可能的山峰元素

代码分析

/**
 * 寻找最后的山峰
 * @param a int整型一维数组 
 * @param aLen int a数组长度
 * @return int整型
 */
int solve(int* a, int aLen ) {
    // write code here
    int i = aLen-1;
    for(; ;i--)
    {
        if(a[i-1] < a[i])
            break;
    }
    return i;
}

题目描述(leetcode)

https://leetcode-cn.com/problems/find-peak-element/solution/hua-jie-suan-fa-162-xun-zhao-feng-zhi-by-guanpengc/

代码

int findPeakElement(int* nums, int numsSize){
    int i = 0;
    for(; i< numsSize-1; i++)
    {
        if(nums[i] > nums[i+1])
        return i;
    }
    return i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值