From 88d297c5a45d18bd8ebbb7a7c825664a58cda9f9 Mon Sep 17 00:00:00 2001 From: sailok Date: Sat, 10 Oct 2020 08:58:43 +0530 Subject: [PATCH] Adding 0368 - Largest Divisible Subset Problem --- LeetCode/0368_Largest_Divisible_Subset.py | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 LeetCode/0368_Largest_Divisible_Subset.py diff --git a/LeetCode/0368_Largest_Divisible_Subset.py b/LeetCode/0368_Largest_Divisible_Subset.py new file mode 100644 index 0000000..ea55aeb --- /dev/null +++ b/LeetCode/0368_Largest_Divisible_Subset.py @@ -0,0 +1,27 @@ +class Solution: + def largestDivisibleSubset(self, nums: List[int]) -> List[int]: + if len(nums) < 2: + return nums + #creating a monotonic sequence of list + nums.sort() + #creating a DP list to keep track of how many preceeding elements can divide ith element + dp = [1]*len(nums) + max_ind = 0 + #dp pass using the following condition + for i in range(1, len(nums)): + for j in range(i): + if nums[i]%nums[j] == 0: + dp[i] = max(dp[i], dp[j] + 1) + if dp[max_ind] < dp[i]: + max_ind = i + res = [] + res.append(nums[max_ind]) + prev = nums[max_ind] + #reconstructing the sequence by iterating backwards + for i in range(max_ind - 1, -1, -1): + if dp[i] > 0 and dp[max_ind]-1 == dp[i] and prev%nums[i] == 0: + res.append(nums[i]) + prev = nums[i] + max_ind = i + res.reverse() + return res \ No newline at end of file