Array Max Consecutive Sum

Рядом порядка k, массива A мы назавем произвольно выбранную группу последовательных элементов, количеством k из позиции i.
Например для массива A = [2, 3, 5, 1, 6] порядка k = 2 ряды будут A = [2, 3] A = [3, 5] A = [5, 1] A = [1, 6] подмассивы. Надо написать функцию, которая получает массив [x1, x2, x3, … xn] и возвращает максимальную сумму рядов порядка n. Например в вышеуказанном примере мы получим 8, потому что оно наибольшое значение, которое получается когда мы слогаем элементы рядов. В нашом примере из ряда [3, 5].

function arrayMaxConsecutiveSum (input, k) {
    let sum = 0;
    let max = 0;

    for (let i = 0; i < input.length; i++) {
        sum += input[i];
        if (i >= k) sum -= input[i - k];
        if (sum > max) max = sum;
    }
    return max;
}

console.log(solution([2, 3, 5, 1, 6, 2], 2));    // 8
console.log(solution([2,4, 10, 1, 2], 2));       // 14
console.log(solution([2, 4, 10, 9, 2], 2));      // 19
console.log(solution([1, 3, 2, 4, 3], 3));       // 9
console.log(solution([5,4,1,3,2,4,3], 3));       // 10


А нужнно чтобы выводил. 

console.log(solution([2, 3, 5, 1, 6, 2]));    // 8
console.log(solution([2,4, 10, 1, 2]));       // 14
console.log(solution([2, 4, 10, 9, 2]));      // 19
console.log(solution([1, 3, 2, 4, 3]));       // 9
console.log(solution([5,4,1,3,2,4,3]));       // 10

Заранее скажу что код проверяет спрогромированная 
система в котором уже есть тести которые проверяют все случая например для    
k =2, 3 

Ответы (1 шт):

Автор решения: Igor

Я не понял, почему функция должна вывести 8, когда нет второгo параметра.

function solution(inp, k) {
  let sum = 0;
  let max = 0;
  for (let i = 0; i < k; i++)
    max += inp[i];
  sum = max;

  for (let i = 0; i < inp.length - k; i++) {
    sum = sum - inp[i] + inp[i + k];
    if (sum > max) 
      max = sum;
  }
  
  return max;
}

console.log(solution([2, 3, 5, 1, 6, 2], 2));    // 8
console.log(solution([2,4, 10, 1, 2], 2));       // 14
console.log(solution([2, 4, 10, 9, 2], 2));      // 19
console.log(solution([1, 3, 2, 4, 3], 3));       // 9

Похоже, что нужна сумма, дающая максимальное среднее сложенных элементов.

function solution(inp, k) {
  let sum = 0;
  let max = 0;
  for (let i = 0; i < k; i++)
    max += inp[i];
  sum = max;

  for (let i = 0; i < inp.length - k; i++) {
    sum = sum - inp[i] + inp[i + k];
    if (sum > max) 
      max = sum;
  }
  
  return max;
}

function solutionMaxAvg(inp) {
  let sum, avg;
  let max, maxAvg;
  for (let i = 2; i <= inp.length; i++) {
    sum = solution(inp, i);
    avg = sum / i;
    if (i == 2 || avg > maxAvg) {
      max = sum;
      maxAvg = avg
    }
  }
  return max;
}

console.log(solutionMaxAvg([2, 3, 5, 1, 6, 2]));
console.log(solutionMaxAvg([2,4, 10, 1, 2]));
console.log(solutionMaxAvg([2, 4, 10, 9, 2]));
console.log(solutionMaxAvg([1, 3, 2, 4, 3]));
console.log(solutionMaxAvg([5,4,1,3,2,4,3]));

→ Ссылка