package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev

# README

368. Largest Divisible Subset

Level - medium

Task

Given a set of distinct positive integers nums, return the largest subset answer such that every pair (answer[i], answer[j]) of elements in this subset satisfies:

  • answer[i] % answer[j] == 0, or
  • answer[j] % answer[i] == 0

If there are multiple solutions, return any of them.

Объяснение

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

Формальное описание задачи:

  • Дано: массив чисел nums.
  • Найти: подмножество subset такое, что для каждой пары элементов a и b в subset, где a предшествует b, выполняется условие b % a == 0.
  • Цель: максимизировать размер subset.

Пример:

  • Вход: nums = [1, 2, 3, 4, 8]
  • Выход: [1, 2, 4, 8]

Объяснение: В данном примере подмножество [1, 2, 4, 8] удовлетворяет условию, что каждый элемент делится на предыдущий. Это наибольшее возможное подмножество с таким свойством.

Для решения этой задачи можно использовать динамическое программирование. Основная идея заключается в сортировке массива и последующем построении наибольшего делимого подмножества с помощью запоминания наилучших решений для каждого элемента.

Example 1:

Input: nums = [1,2,3]
Output: [1,2]
Explanation: [1,3] is also accepted.

Example 2:

Input: nums = [1,2,4,8]
Output: [1,2,4,8]

Constraints:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 2 * 10^9
  • All the integers in nums are unique.