Я решил это с помощью Java.Вы можете адаптироваться к Javascript.
Этот код не требует использования кучи.Он просто работает на том же массиве.Пройдены все тесты для меня.
static int cookies(int k, int[] arr) {
/*
* Write your code here.
*/
Arrays.sort(arr);
int i = 0,
c = arr.length,
i0 = 0,
c0 = 0,
op = 0;
while( (arr[i]<k || arr[i0]<k) && (c0-i0 + c-i)>1 ) {
int s1 = i0==c0 || arr[i]<=arr[i0] ? arr[i++] : arr[i0++],
s2 = i0==c0 || (i!=c && arr[i]<=arr[i0]) ? arr[i++] : arr[i0++];
arr[c0++] = s1 + 2*s2;
op++;
if( i==c ) {
i = i0;
c = c0;
c0 = i0;
}
}
return c-i>1 || arr[i]>=k ? op : -1;
}
- Прежде всего массив сортировки.
- Для вновь вычисленных значений сохраните их в диапазоне массива [i0-c0], этот новый массивне требует сортировки, потому что она уже отсортирована.
- Когда массив [ic] достигает (i == c: true) конца, забудьте об этом и работайте над arr [i0-c0].