Мое решение (можно значительно упростить):
const wave=5;
const relief='1 2 4 2 3 4 5 1 4 6'.split(' ');
const puddles=[];
let puddle=[];
for(let i=0;i<relief.length;i++){
const prevHeight=!puddle.length?(relief[i-1]||0):puddle[0];
const height=relief[i];
if(wave<=height)
break;
if(!puddle && prevHeight<=height)
continue;
if(prevHeight>height)
(!puddle.length?(puddle=[prevHeight]):puddle).push(height);
if(puddle[0]<=height){
puddles.push(puddle);
puddle=[];
}
}
const result=puddles.map(puddle=>{
const max=+puddle.shift();
return puddle.reduce((r,h)=>r+max-h,0);
}).reduce((r,v)=>r+v,0);
alert(result);