Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.08.2020, 02:54
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

Это задание для для тех, кто на работу в скором времени хочет устроиться, для начинающих в общем
Ответить с цитированием
  #12 (permalink)  
Старый 12.08.2020, 03:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Marson
Это задание для для тех, кто на работу в скором времени хочет устроиться
Я как разработчик ПО не обязан знать тонкости какого либо производства или иной области, по которой мне предстоит выполнить заказ. Это задача заказчика максимально доходчиво ставить задачу, поясняя назначение, цель и взаимосвязи ее компонентов.

Есть заказчики, которые знают, что "хотят", но не могут толком объяснить этого и приходится все из них вытягивать, либо решать что-то исходя из своих представлений.

Одно дело не понимать какая взаимосвязь данных задачи, и как решить задачу, если знать в полном объеме о ней все. В первом случае это всецело на совести поставившего задачу, а во втором случае, это уже будет вашей профнепригодностью.
Ответить с цитированием
  #13 (permalink)  
Старый 13.08.2020, 04:36
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

Задача в том, что нужно найти максимальное сумму чисел из всех возможных комбинаций и при этом между числами, которые суммируются должен быть минимум один пустой индекс(уборка). Рони понял сразу, а я нет. Опыт не купишь)
Ответить с цитированием
  #14 (permalink)  
Старый 13.08.2020, 15:39
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

По какому принципу этот алгоритм нужно написать, ведь есть же где два пропуска, а есть где один? Рони, можете дописать объяснение к вашему коду пожалуйста

Последний раз редактировалось Marson, 13.08.2020 в 15:43.
Ответить с цитированием
  #15 (permalink)  
Старый 13.08.2020, 16:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Marson
По какому принципу этот алгоритм нужно написать, ведь есть же где два пропуска, а есть где один? Рони, можете дописать объяснение к вашему коду пожалуйста
смотрим текущий массив
если последний элемент не ноль добавляем ноль,
строка 10 if (last) ar.push(0);
если последние элементы ноль ноль добавляем элемент из первоначального массива,
строка 14 else ar.push(arr[i])
если последние элементы не ноль и ноль создаём дубликат и добавляем ноль, к текущему массиву добавляем элемент из первоначального массива.
строка 12
else if (prev) {
up.push([...ar, 0]);
ar.push(arr[i])
}
весь алгоритм.
Ответить с цитированием
  #16 (permalink)  
Старый 16.08.2020, 22:36
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Похоже, задача на динамическое программирование.
Алгоритм примерно такой:
function maxSum(arr) {
  var memo = [0, 0];
  function maxSumR(len) {
    if (len < 2) {
      return len ? arr[0] : 0;
    } else {
      if (memo[len]) {
        return memo[len];
      } else {
        return memo[len] = Math.max(maxSumR(len - 1), arr[len - 1] + maxSumR(len - 2));
      }
    }
  }
  return maxSumR(arr.length);
}

alert(maxSum([4, 10, 3, 1, 5]));


Компа под рукой нет, не дебажил. Но в целом всё стандартно - сведение задачи n элементов к задаче для n-1 или n-2, плюс мемоизация, так что должно по идее за линейное время, если не ошибаюсь. Предполагается, что отрицательных чисел нет. Здесь вычисляется только сумма, а если надо индексы чисел, то придется допиливать.

Последний раз редактировалось Alexandroppolus, 16.08.2020 в 22:38.
Ответить с цитированием
  #17 (permalink)  
Старый 16.08.2020, 23:06
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Пожалуй, тут без рекурсии можно, тогда не понадобится расходовать память на мемоизацию. Всё просто, в общем. Вот вариант, где по сути делается то же самое.

function maxSum(a) {
  if (!a || !a.length) {
    return 0;
  }
  var x = 0, y = a[0];
  for (var i = 1; i < a.length; ++i) {
    var t = y;
    y = Math.max(x + a[i], y);
    x = t;
  }
  return y;
}

alert(maxSum([3, 20, 8]));
alert(maxSum([4, 10, 3, 1, 5]));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задание на тему инкапсуляции splean101 Элементы интерфейса 0 14.10.2018 07:47
Интересное задание "Поединок" помогите решить Anton27 Общие вопросы Javascript 1 23.05.2017 22:24
Помогите сделать задание malin Общие вопросы Javascript 4 16.08.2016 11:00
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26
Прелоэдер. Помогите разобрать код. bayah Общие вопросы Javascript 1 05.05.2010 20:32