在数组中查找峰值(与邻域)

时间:2016-05-30 09:50:31

标签: java arrays

假设我有一维数组,我想找到峰值。与经典峰值发现的不同之处在于我不仅需要检查其邻居,还需要检查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元素。

1 个答案:

答案 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);
     }
   }
}