您可以在此处查看任务文字:https://codility.com/programmers/lessons/8/
这是我的解决方案:
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
var length = A.length,
peaksIndex = [];
for (var i=1;i<length-1;i++){
if (A[i] > A[i-1] && A[i] > A[i+1]){
peaksIndex.push(i);
}
}
var peaksLength = peaksIndex.length;
var maxPeaksLength = Math.min(Math.ceil(Math.sqrt(length)), peaksLength);
var maxFound = 0;
for (var j=maxPeaksLength;j>0;j--){
//debugger;
// j is the max number of flags AND distance
var found = 0;
var distance = 0;
for (var k=peaksLength-1;k>=0;k--){
var prevPeak;
if (k===0){
prevPeak = -j;
} else {
prevPeak = peaksIndex[k-1];
}
distance += peaksIndex[k]-prevPeak;
if (distance >=j){
distance = 0;
found++;
}
}
if (found > maxFound) {
maxFound = found;
}
if (maxFound >= j-1){
break;
}
}
return maxFound;
// write your code in JavaScript (Node.js 4.0.0)
}
或在Codility:https://codility.com/demo/results/trainingQJNNVS-U3Y/
正如你在那里看到的那样,唯一不正确的情况是
large_anti_slow
大试慢慢 解决方案WRONG ANSWER得到317,预计为316
0.298 s确定
- 醇>
0.216 s WRONG ANSWER,预计317预计316
简而言之,我不明白我的算法中有什么问题,只有在这种情况下才会失败?
答案 0 :(得分:0)
k上的迭代次序看起来有点奇怪。从循环的内容看起来你想从k == 0开始,但循环实际上是按降序排列。
如果你改变它可能会更好:
for (var k=peaksLength-1;k>=0;k--){
到
for (var k=0;k<=peaksLength-1;k++){