Javascript Алгоритм Максимальный подмассив - PullRequest
0 голосов
/ 30 мая 2020

Я получил этот вопрос из кода leet, и я получил этот ответ из учебника YouTube, но я не понимаю, в какой части max. Поскольку max равно arr[0], а значение -2, и даже оно входит в l oop, это просто -2, но max возвращает значение 6.

Как это возможно?

const givenArray = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
const getMax = arr => {
  let sum = arr[0]; //-2
  let max = arr[0]; //-2
  for (let i = 1; i < arr.length; i++) {
    sum = Math.max(sum + arr[i], arr[i]);
    max = Math.max(max, sum);

  }

  console.log(sum);
  console.log(max);
};

getMax(givenArray);

1 Ответ

0 голосов
/ 30 мая 2020

max = -2 сумма = -2

l oop arr [1] = 1: sum = max (-2 + 1, 1) = 1, max = max (sum = 1, max = -2) = 1

max = 1 сумма = 1

l oop arr [2] = - 3: sum = max (1 + -3, -3) = -2, max = max (sum = -2, max = 1) = 1

max = 1 sum = -2

l oop arr [3] = 4: sum = max (-3 + 4, 4) = 4, max = max (sum = 4, max = 1) = 4

max = 4 sum = 4

l oop arr [ 4] = - 1: сумма = max (4 + -1, -1) = 3, max = (3,4) = 4

max = 4 сумма = 3

l oop arr [5] = 2: sum = max (3 + 2, 2) = 5, max = max (5,4) = 5

Итак, итерация выглядит так:

arr [-2, 1, -3, 4, -1, 2, 1, -5, 4]  
sum   x, 1,  x, 4,  3, 5, 6,  1, 5  

max  -2, 1,  1, 4,  4, 5, 6,  6, 6

Это похоже на поиск прогрессивных сумм, отбрасывание отрицательных последовательностей или начало новой последовательности, когда сумма отрицательная, потому что любая отрицательная последовательность будет отрицательно влиять на общую сумму последовательности.

И вы используете max = Math.max (max, sum), (установить max равным большему, текущему максимальному значению или текущей сумме), чтобы найти наибольшее достигнутое значение в прогрессивных суммах (то есть 6).
Это также учитывает крайний случай всех отрицаний, где максимальная сумма будет наибольшим отрицательным числом.

const givenArray = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
const getMax = arr => {
  let sum = arr[0]; //-2
  let max = arr[0]; //-2
  for (let i = 1; i < arr.length; i++) {
    sum = Math.max(sum + arr[i], arr[i]);
    max = Math.max(max, sum);
    console.log(`max=${max}`, `sum=${sum}`);
  }

};

getMax(givenArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...