【问题标题】:Find peaks in array (with neighborhood)查找数组中的峰值(具有邻域)
【发布时间】:2016-05-30 09:50:30
【问题描述】:

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

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    尽量避免不重要的比较。示例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2021-04-04
      相关资源
      最近更新 更多