假设我有一维数组,我想找到峰值。与经典峰值发现的不同之处在于我不仅需要检查其邻居,还需要检查n
左邻居和n
右邻居。例如我的数组如下:
[1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
n = 4
。我需要检查长度为4 + 1 + 4
的每个子数组,并查看中间元素是否为最大值。
在案件中:
[5,6,7,8,9,8,7,6,5]
,9是最高峰。
但这听起来效率不高。那么什么是更好的解决方案呢?当我找到一个峰值时,我可以忽略我认为的下一个n
元素。
答案 0 :(得分:0)
尽量避免不重要的比较。实施例
public class NewClass12 {
static int [] arr = {1,2,3,4,5,3,2,1,0,9,7,6,5,4,3,2,1};
public static void main(String [] args){
int n = 4; //bounds
boolean peakFound = false;
int peak = 0;
//iterate of data
for(int k = n; k<=arr.length-n+1;k++){
//check data within bounds
for (int i = 1;i <=n;i++){
if(arr[k]<arr[k-i] || arr[k]<arr[k+i]){
peakFound = false;
break;
}
else{
peakFound = true;
peak = arr[k];
}
}
if(peakFound)
System.out.println(peak);
}
}
}