Codility标志JavaScript的解决方案
问题描述:
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;
}
答
问题是,我没有洗牌阵列后重新循环,
这里是我的100%[O( N)or O(N * sqrt(N))] javascript解决方案 - >