2015-06-20 69 views
2

Codility标志挑战(看着其他职位在这里,但它没有帮助)Codility标志JavaScript的解决方案

下面的代码得到了40%,它在中型和大型的投入失败。输入大小可能并不重要,但在这些输入中有一些特殊情况,其中我的代码失败,我无法找出这些情况。

这里是任务

这里是我的结果https://codility.com/demo/results/demoZHJB56-RHM/

function solution(A) 
{ 
    var mountains = A.length; 
    var prevMountain; 
    var currentMountain; 
    var nextMountain; 
    var i; 
    var peaks = []; 
    var currentPeak; 
    var prevPeak; 
    var output = 0; 
    var gap; 

    for(i = 1; i < (A.length-1); i++) 
    {      
     prevMountain = A[i-1]; 
     currentMountain = A[i]; 
     nextMountain = A[i+1]; 

     if(currentMountain > prevMountain && currentMountain > nextMountain) 
     { 
      peaks.push(i); 
     }                             
    }                              

    if(peaks.length > 0) 
    { 
     gap = peaks.length;                             
     for(i = peaks.length; i >= 1; i--) 
     {              
      currentPeak = peaks[i-1]; 
      prevPeak = peaks[i-2]; 

      if(i === 1){ prevPeak = peaks.length * (-1); }       

      if((currentPeak - prevPeak) < gap) 
      {        
       gap = gap - 1; 
       peaks[i-2] = currentPeak; 
       peaks[i-1] = prevPeak;    
      } 
      else 
      { 
       output++;    
      }  
     } 
    } 
    return output; 
} 

回答