数字问题1:寻找峰值

Posted 纵横千里,捭阖四方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字问题1:寻找峰值相关的知识,希望对你有一定的参考价值。

数字、字符串和位图本身不是一种数据结构,但是由于其本身的特殊性,产生了很多专门针对其特征的算法,例如字符串的匹配算法等,这些既是面试容易考察的问题,也是平时开发会遇到的问题。因此我们从现在开始整理一些常见的数字、字符串和位图与异或的题目。

1.题目解释

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

注意审题,是索引最大,而不是值最大,两者的难度差很多。 如果要加快速度,可以考虑从后向前,找到一个就OK了。

这个题也可以看做数组题,这里就当做数字问题来看吧。

import java.util.*;

public class Solution {
    /**
     * 寻找最后的山峰
     * @param a int整型一维数组 
     * @return int整型
     */
      public int solve (int[] a) {
        // write code here
        int n = a.length;
    
    for(int i = n - 1; i >= 0; i--) {
        if((i + 1 == n || a[i] >= a[i+1]) && (i - 1 == 0 || a[i] >= a[i-1]))
            return i;
    }
    return -1;
    }
}

2.拓展

如果这里将索引最大改成值最大呢, 为了方便处理,将首尾两个分别处理。

public static int solve(int[] a) {
    int n = a.length;
    int max = 0, index = 0;

    if (a[1] <= a[0]) {
        max = a[0];
        index = 0;
    }

    for (int i = 1; i < a.length - 1; i++) {
        if (a[i] >= a[i + 1] && a[i] >= a[i - 1]) {
            if (max < a[i]) {
                max = a[i];
                index = i;
            }
        }

    }
    int len = a.length - 1;
    if (a[len] >= a[len - 1] && (max < a[len - 1])) {
        max = a[len];
        index = len;
    }

    return index;
}

以上是关于数字问题1:寻找峰值的主要内容,如果未能解决你的问题,请参考以下文章

75 寻找峰值

lintcode_75.寻找峰值

寻找峰值--学会处理越界问题

LeetCode 162. 寻找峰值c++/java详细题解

162. 寻找峰值

Lintcode 75.寻找峰值