Partition Array for Maximum Sum - Leetcode 1043 - Python

  Рет қаралды 16,615

NeetCodeIO

NeetCodeIO

Күн бұрын

🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🧑‍💼 LinkedIn: / navdeep-singh-3aaa14161
🐦 Twitter: / neetcode1
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
Problem Link: leetcode.com/problems/partiti...
0:00 - Read the problem
0:17 - Memoization Explanation
7:07 - Coding Memoization
12:32 - DP Explanation
22:31 - Coding DP
leetcode 1043
#neetcode #leetcode #python

Пікірлер: 42
@pastori2672
@pastori2672 5 ай бұрын
10 + 9 = 15 caught me so off guard 😭 take a rest bro
@pastori2672
@pastori2672 5 ай бұрын
great video tho
@satyamjha68
@satyamjha68 5 ай бұрын
Solved this by myself!!
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
Love to hear it!!
@satyamjha68
@satyamjha68 5 ай бұрын
@@NeetCodeIO I actually had a doubt whether it is necessary to write tabulation solution in the interview. Isn't memoization solution enough ? Does it depend on the interviewer and level of question? Cause generally I don't practice writing tabulation solution . I write the recursive approach , memoize it and call it a day.
@SlateCode
@SlateCode 5 ай бұрын
No😢
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
In many cases memoization may be enough. The bottom-up solution for this problem isnt as difficult as I have shown, the main complexity in my solution came from the memory optimization / circular array. The main reason I show the bottom up solution is people sometimes complain if omit the most optimal solution.
@saminhasan87
@saminhasan87 5 ай бұрын
Hey Neato!!! I could figure out the memoization solution by myself today and credit goes to you!!! I follow your video regularly and have learnt a lot. Your 1D DP playlist was a game-changer for me, showing me how to break down complex problems into manageable subproblems. Now I don't afraid a DP problem and try my best to solve that myself. I am grateful to you.
@yaswanthkosuru
@yaswanthkosuru 5 ай бұрын
you stared this question .this problem is some what different and great
@SanketBhat7
@SanketBhat7 5 ай бұрын
I am happy because I was able to come up with recursive solution with memorization on my own.
@anlee728
@anlee728 4 ай бұрын
Thank you for providing multiple solutions!!
@kareemadesola6522
@kareemadesola6522 5 ай бұрын
phew, they really do want us preoccupied during the weekends
@MP-ny3ep
@MP-ny3ep 5 ай бұрын
Thank you !!
@krateskim4169
@krateskim4169 5 ай бұрын
Thank you so much
@Kaviarasu_NS
@Kaviarasu_NS 5 ай бұрын
Thanks❤
@tranminhquang4541
@tranminhquang4541 5 ай бұрын
Even though I know it's a dp problem, I still struggle to figure it out ! Thanks for your ingenious solution as always!
@SaranNarayan
@SaranNarayan 5 ай бұрын
sub_sum = dp[(j - 1) % k] would work without the j > 0 check in python.. say j is 0 then j-1%k will be -1 only.
@kirillzlobin7135
@kirillzlobin7135 5 ай бұрын
Amazing
@SalmanMKC
@SalmanMKC 5 ай бұрын
back with another video
@LokendraSingh-42
@LokendraSingh-42 5 ай бұрын
At 7:20 time complexity of brute force should be O(N^k)
@emenikeanigbogu9368
@emenikeanigbogu9368 5 ай бұрын
I feel like an iterative approach would work here if you used a sliding window. Reversed the array and then did the sliding window again.
@mailatkaushal
@mailatkaushal 5 ай бұрын
i do my dp solution both ways for better understanding..
@6a.s.harishkumar62
@6a.s.harishkumar62 5 ай бұрын
Kind Request : Please explain leetcode 1190 it is not in neetcode it is asked in our campus placement drive !
@rorothepropro
@rorothepropro 5 ай бұрын
1:25 I was out here thinking 9+10=21 but it turns out it's 15
@razataggarwal7365
@razataggarwal7365 5 ай бұрын
1:24 9+10 = 15 🤣
@midhileshmomidi3120
@midhileshmomidi3120 5 ай бұрын
what is difference between this and sliding window maximum
@user-gs7xf6qt4l
@user-gs7xf6qt4l 5 ай бұрын
They are essentially different. In sliding window maximum, we want an O(1) method to query for a "FIXED" window size. This is achieved by monotonic decreasing queue of lenmonotonic queue "INCREASING" window size => prefix/suffix Hope it helps :)
@tizekodnoon8305
@tizekodnoon8305 4 ай бұрын
Neato! Brain Fried 🤯
@ayush7800
@ayush7800 5 ай бұрын
Can we do this? We want to maximize the sum, so we can sort the array in nlogn time. Afterwards we take last element of sorted array and replicate it k times if possible, otherwise replicate it enough to fit our result array. Then we move the second last element, replicate it k times and add it to result array and so on. Finally we return the sum of result array?
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
To get subarrays unfortunately you cant reorder the elements
@ayush7800
@ayush7800 5 ай бұрын
​@@NeetCodeIOBut at the end what we want is the maximised sum, and if we replicate the greatest elements, the sum would be greatest too. This is true if I am not missing anything. For example even if we don't reorder, maximum sum can be obtained if we replicate the greatest element, second greatest element.... etc. when we are traversing the array?
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
I think the order of elements matter. Consider this example: arr = [10, 10, 1, 1, 1, 1], k = 3.
@samarthjain5015
@samarthjain5015 5 ай бұрын
1:22 What?
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
Omfg, if my parents saw that they would bring out the chappal 🥿
@ara0n
@ara0n 5 ай бұрын
@@NeetCodeIO bhai what is this hera pheri xD
@theshlok
@theshlok 5 ай бұрын
what in the indian trauma is this@@NeetCodeIO
@kahafb
@kahafb 5 ай бұрын
Isn't your solution a bit overly complicated? I feel like people should really get over calculating it "backwards". This is how I did it: class Solution: def maxSumAfterPartitioning(self, arr: List[int], k: int) -> int: # Step 2: Tabulate n = len(arr) dp = [0]*(n+1) for i in range(n-1, -1, -1): curMax = 0 for j in range(min(k, n-i)): curMax = max(curMax, arr[i+j]) dp[i] = max(dp[i], curMax*(j+1) + dp[i+j+1]) return dp[0] # Step 1: Memoize n = len(arr) memo = {} def dfs(i): if i in memo: return memo[i] if i == n: return 0 curMax = largest = 0 for j in range(min(k, n-i)): curMax = max(curMax, arr[i+j]) largest = max(largest, curMax*(j+1) + dfs(i+j+1)) memo[i] = largest return largest return dfs(0)
@NeetCodeIO
@NeetCodeIO 5 ай бұрын
Yeah, your tabulation solution is definitely more simple, but it has little to do with the order we traverse the array. The main complexity in my solution came from the circular array memory optimization.
@kareemadesola6522
@kareemadesola6522 5 ай бұрын
​@@NeetCodeIO,I find tabulating from N - 1 rather than from 0 more intuitive and natural. Starting from N - 1 when building the table feels closer to converting a recursive solution to dynamic programming. It aligns well with the way we often express recursive solutions, like return dfs(0) becoming dp[0]. This approach seems more straightforward and aids in understanding the transition from a recursive approach to dynamic programming. Could you please continue tabulating from N - 1 in your future videos as you did initially? Thanks PS: Great work giving us both approaches
@CS_n00b
@CS_n00b 5 ай бұрын
why not just dp[abs((j - 1)%k)] instead of dp[(j - 1)%k] if j > 0 else dp[-1]
@karananeja8054
@karananeja8054 5 ай бұрын
how is 9 + 10 = 15?
@Marcox385
@Marcox385 5 ай бұрын
Well, there goes my 2 day streak
Out of Boundary Paths - Leetcode 576 - Python
18:20
NeetCodeIO
Рет қаралды 15 М.
Mastering Dynamic Programming - How to solve any interview problem (Part 1)
19:41
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 5 МЛН
OMG🤪 #tiktok #shorts #potapova_blog
00:50
Potapova_blog
Рет қаралды 18 МЛН
Sequential Digits - Leetcode 1291 - Python
15:02
NeetCodeIO
Рет қаралды 12 М.
K Inverse Pairs Array - Leetcode 629 - Python
29:44
NeetCodeIO
Рет қаралды 15 М.
Sum of All Subsets XOR Total - Leetcode 1863 - Python
18:26
NeetCodeIO
Рет қаралды 9 М.
Leetcode 1043. Partition Array for Maximum Sum
39:12
Elite Code
Рет қаралды 1,1 М.
Prefix Sums - Problems, Code in C++ & Python
20:51
Errichto Algorithms
Рет қаралды 43 М.
Maximum Profit in Job Scheduling - Leetcode 1235 - Python
14:45
NeetCodeIO
Рет қаралды 28 М.
Furthest Building You Can Reach - Leetcode 1642 - Python
11:08
NeetCodeIO
Рет қаралды 14 М.