数字问题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:寻找峰值的主要内容,如果未能解决你的问题,请参考以下文章