2016-05-30 6 views
0

1D配列があり、ピークを探したいとします。古典的なピークの発見との違いは、その隣人だけでなく、チェックする必要があるということです。しかし、私は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

重要ではない比較を避けるようにしてください。例

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); 
    } 
    } 
} 
関連する問題