Love the Mask! and well, this one is a very nice and do-able DP problem. I was wondering if you could do #276 - Paint Fence? I couldn't do it for the life of me, and it's labelled as "Easy", so maybe I'm missing something and you can enlighten me. Thanks in Advance Kevin!
@KevinNaughtonJr5 жыл бұрын
@@jlecampana Haha thanks and don't pay attention to the labels they're all subjective! I actually think I already have a video on that problem if you wanna check it out! And anytime, thank YOU for your support!!!
@jlecampana5 жыл бұрын
@@KevinNaughtonJr Oh I see it, you have done a video for LeetCode #256 - Paint House, How could I have missed it! I will see if I can actually solve the problem before watching your video. But I do think you should definitely check out #276, I could be wrong but I think it's Harder than most DP regulars. Have a nice day!
@KevinNaughtonJr5 жыл бұрын
@@jlecampana I'll check it out thanks for the suggestion!!!
@PrathamMantri5 жыл бұрын
Thanks Kevin for the best explanation of DP problem. I could use this example as a start for solving DP problems.
@aydasu5 жыл бұрын
love the dp questions. i feel like i am starting to get it. thanks Kevin!
@KevinNaughtonJr5 жыл бұрын
So so so so SO happy to hear that!
@alperozdamar5175 жыл бұрын
I saw this question in real interview and be able to do it. Thank you Kevin. :)
@KevinNaughtonJr4 жыл бұрын
No way that's amazing anytime :)
@bingo71375 жыл бұрын
Purely Awesome! i'm kinda struggling with understanding the dynamic programming problems and this is the best explanation out here. Thank you once again for all your help.
@ahasunos59143 жыл бұрын
Kevin, I've been following your tutorials since past couple of weeks. You don't need to doubt why do you have subscribers. Thank you for all the concepts.
@priyanshmathur30102 жыл бұрын
Bro, all those memes and explanations were lit!! Great Video :D
@jaysaxena1853 жыл бұрын
Excellent Solution Kevin, cleared the concept of dp, through this explanation. Too Good, short, and on-point.
@jaidevsingh10092 жыл бұрын
The clearest video on this problem, thank you!
@svddwd3 жыл бұрын
Very nice explanation and approach . Thank you.
@mohithguptakorangi17663 жыл бұрын
now, that's how you explain "SHIT" in a "BEAUTIFUL" way
@mkhanyisigamedze48075 жыл бұрын
This took me 2 hours and I'm reminded of how understanding key concepts is so efficient. Love your videos
@KevinNaughtonJr4 жыл бұрын
thank you!
@alammahtab084 жыл бұрын
Very well explained. Below is the code in case if someone wants to try out. Both, with the dp[] array and without dp array. With dp[] array : O(n) Space class Solution { public int rob(int[] nums) { if(nums == null || nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0], nums[1]); int[] dp = new int[nums.length]; dp[0] = nums[0]; dp[1] = Math.max(nums[0], nums[1]); for(int i = 2; i < nums.length; i++) { dp[i] = Math.max(nums[i] + dp[i-2], dp[i-1]); } return dp[nums.length-1]; } } Without dp[] array : O(1) Space class Solution { public int rob(int[] nums) { if(nums == null || nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0], nums[1]); int maxBeforeTwoHouse = nums[0]; int maxBeforeOneHouse = Math.max(nums[0], nums[1]); int maxAtI = Math.max(nums[0], nums[1]); for(int i = 2; i < nums.length; i++) { maxAtI = Math.max(maxBeforeTwoHouse+ nums[i] , maxBeforeOneHouse); maxBeforeTwoHouse = maxBeforeOneHouse; maxBeforeOneHouse = maxAtI; } return maxAtI; } } github.com/eMahtab/house-robber
@selinadu15795 жыл бұрын
Awesome solution. Plz plz keep doing these tutorials. Love them!
@OlsZn4 жыл бұрын
I love how you have the perfect camera window to block the previous tries of this question ;)
@loirobin5 жыл бұрын
@Kevin your solution explanation is simple and crystal clear, thanks a lot
@objectivesworld315 жыл бұрын
Hi Kevin nice explanation of dp. but we are sequentially processing so there is no need of dp array. if we change logic like this int first = nums[0]; int second = Math.max(nums[0],nums[1]); int ans = 0; for(int i=2; i
@hookedbeans2 жыл бұрын
This is brilliant. Thank you!
@studyaccount7942 жыл бұрын
We can improve this solution even further. We can use 3 variables instead of using a complete new array. Just like we do in fibonacci. Code- public int rob(int[] nums) { int loot1 = 0; int loot2 = 0; for (int i = 0; i
@wheresthebeach01384 жыл бұрын
Hey Kevin, thank you for this! IMO, it's your best video to date :) I think you took the perfect amount of time to explain the logic before diving into the code; really clicked for me. Thank you!
@NehaJoshi-x5n Жыл бұрын
very intuitive, thanks!
@SaumyaSharma0073 жыл бұрын
Thank you so much Sir 🌟 Awesome explanation out there. Huge love and Respect from India 🌟🤗
@ENGCS_JaiSaxena2 жыл бұрын
that is unbelivable , how are u able to solve so easily dude.great work.
@wakita5 жыл бұрын
Thanks for doing the dynamic programming problems, I've been trying various difficulty ones for a while, and one of the things thats helped me the most has been watching your Leetcode videos, along with BackToBack SWE and Tushar Roy. I did something pretty similar to you in my Javascript solution, but did it in place, modifying the original input array. I think this could also be done in constant space and not modifying the input by using a variable to represent max up to i - 1 and max up to i - 2. Javascript solution ===== var rob = function(nums) { if (nums.length === 0) return 0; if (nums.length === 1) return nums[0]; for (let i=1; i
@georgiossamaras50633 жыл бұрын
You don't need the if statement for the 2 houses case. Nice explanation, thanks!
@killersdeat05 жыл бұрын
Great intuition! A lot of people only keep 2 numbers (value if you robbed the house vs value if you didn't) and alternate saving the variables but I think that building the dp table is a lot more intuitive. We can also simplify the space complexity of the solution to be O(1) once we see the concept of building the table out in a real interview scenario
@KevinNaughtonJr5 жыл бұрын
Thanks and definitely very good point!!!
@vaishnavipamulapati99202 жыл бұрын
i was struggling with this problem for a day 😔 but your explanation was very intuitive! thank you!
@hyonsoo795 жыл бұрын
Very easy to understand. Thank you!
@KevinNaughtonJr5 жыл бұрын
Anytime Kevin!
@mp01575 жыл бұрын
Thank you Kevin!! Good and simplified explanation! :) This helped!
@AmolGautam3 жыл бұрын
Thank you for the explaination.
@economicriskcapitalmodelpr98495 жыл бұрын
This is my first visit to this channel and it's really impressive.Thanks for sharing your knowledge !! I am going to watch at least one video everyday.
@KevinNaughtonJr4 жыл бұрын
Anytime and thanks for the support!
@DhruvPatel-kg5ut5 жыл бұрын
Awesome bro. This is the 3rd video I saw for this problem and now I actually could figure out the solution. Thanks.
@KevinNaughtonJr5 жыл бұрын
Anytime Dhruv happy to hear the video was helpful :)
@ichdiegross5 жыл бұрын
You did a great job at explaining the concept properly!
@KevinNaughtonJr5 жыл бұрын
Thanks Pranav!
@crimsoncad32304 жыл бұрын
This is the 1st dp problem for which I paused the video and got the DP logic on my own. This should be the 1st video to watch when you start learning DP. Initially I thought of 2 independent loops that calculates the sum of all odd and even plce elements, then take the max out of it. But this seems more optimized and useful for new concept.
@vaichegodas4 жыл бұрын
you cant use 2 for loops to solve the problem
@shredchic4 жыл бұрын
I tried the odd/even thing as well first, but it will miss the max in some cases. Consider [8, 1, 9, 2, 5, 20] With checking odd vs. even, the max would be 23. However, the best robbery is 37. :)
@hitec16915 жыл бұрын
Nicely explained. Thank you
@Slumpicus5 жыл бұрын
You're killing it, dude. Keep it up!
@KevinNaughtonJr5 жыл бұрын
Thanks Grayson I really appreciate it and don't worry I'm not going anywhere! New video is uploading now so get ready to check it out. Thanks so much for your support!
@ridhwaans4 жыл бұрын
the confusing part is how the dp array carries over the largest sum without overlapping sums and maintaining non adjacency
@humblecoder91195 жыл бұрын
Super explanation. Good to understand DP like this.
@AshishSingh-dn8wb4 жыл бұрын
We actually don't need to check if nums.length==2 in the beginning. We are taking care of that in the loop itself. Anyway, loved the explanation. Love your videos man!
@tirthjayswal98954 жыл бұрын
Really Good Explentation
@AliMehrpour-Volcano5 жыл бұрын
Crystal clear and neat explanation, good job as always 👍
@mp01575 жыл бұрын
Very well explained intution! :) Thanks, this was of immense help!
@KevinNaughtonJr5 жыл бұрын
Mihir Phatak thanks Mihir! Happy to hear the video was helpful :)
@vashi19895 жыл бұрын
simple and nice explanation.. i dont think we need an extra array.. i tried with the provided nums arrays and it worked.
@lazycoder19103 жыл бұрын
The explanation was really amazing
@ChocolateMilkCultLeader4 жыл бұрын
Bro this one was genius. Hats off for a great solution
@KevinNaughtonJr4 жыл бұрын
devansh thanks dude
@rajdipdas94133 жыл бұрын
this problem can be solved by including first number from first index or excluding first number from first index and continue for the next indices.
@datajunkie34274 жыл бұрын
The question starts with: You are a professional robber planning to rob houses along a street... That's a good start
@kairu864 жыл бұрын
Very helpful. Thanks!
@renetchi3 жыл бұрын
Why do you have subscribers? lollll because you're awesome!
@Dorin-Baba5 жыл бұрын
I think you got a dude moving in the background =)
@adityapaithon64994 жыл бұрын
yea creeped me out at 5:18
@oneautumnleaf474 жыл бұрын
Any referrence for dp? Where can I learn that? They don't teach it at school. lol
@saulgoodman9804 жыл бұрын
My Python solution: def rob(nums): dp = [0, 0] # having 0s instead of nums[0] and max(nums[:2]) handles cases where len(nums) is 0 or 1 or 2 for num in nums: dp.append(max(dp[-1], num + dp[-2])) return dp[-1]
@yv63584 жыл бұрын
Oh! Hey when did you start programming?
@saulgoodman9804 жыл бұрын
@@yv6358 It's been 5 years since I started (in school), but I've become serious only from the last 1.5 years
@yv63584 жыл бұрын
@@saulgoodman980 What happened to your career in law?
@saulgoodman9804 жыл бұрын
@@yv6358 Oh xD Well, you'll know in BCS S06 ;)
@yv63584 жыл бұрын
@@saulgoodman980 waiting for it
@manulscode5 жыл бұрын
The robber is already sleeping in the background.:D
@KevinNaughtonJr4 жыл бұрын
hahahah
@theanonymousfoodie89063 жыл бұрын
this question was asked in my interview and I'm not able to solve that, now it looks very simple to me. Dammmmm!!!
@ecea044gauravgogoi23 жыл бұрын
so nicely explained
@Vikasslytherine5 жыл бұрын
How to identify if a certain problem's going to need dynamic problem to solve?
@cam58625 жыл бұрын
1. great understandable DP explanation 2. love your freeze frame gold esp at 1:22 (that's some field theory sh*t I had to learn for cryptography 🤣) thanks for your helping me prep for my Google interview next week!
@Dorin-Baba5 жыл бұрын
So, i guess you're a googleer now? :) Hope yes
@cam58625 жыл бұрын
@@Dorin-Baba unfortunately not :( I'm an Amazonian tho!
@peterdinklage38564 жыл бұрын
Awesome explanation mate!! thanks a lot!!
@KevinNaughtonJr4 жыл бұрын
Swapnil Shukla anytime happy it was helpful!
@seal01184 жыл бұрын
how do results not overlap, is there proof to this?
@PrashantNigam5 жыл бұрын
An improvement over this solution. Same as for Nth Fibonacci number. Without DP array. // T/S: O(n)/O(1) public int rob(int[] nums) { if (nums.length == 0) return 0; if (nums.length == 1) return nums[0]; int twoBack = nums[0]; int oneBack = Math.max(nums[0], nums[1]); int curr = b; for (int i = 2; i < nums.length; i++) { curr = Math.max(nums[i] + twoBack, oneBack); twoBack = oneBack; oneBack = curr; } return curr; }
@jagrutijamba90933 жыл бұрын
Hi Kevin, nice try. But your alogrithm would not return the correct answer in the following case : [2,1,3,4]. The answer should be 2+4 = 6. As both the locations are non-consecutive and lead to max loot. Hence, I tried solving this problem with recursion instead.
@ayanagrawal3 жыл бұрын
Update : This is in medium now.
@RohanDaDev4 жыл бұрын
Okay, im not sure if its this simple or not, but wouldn't the question devolve into checking whether the sum of the even numbered indices is greater than the odd? the only possible combos are all the even numbered indices and odd numbered indices. But i don' think its that easy
@arpitverma80604 жыл бұрын
Awesome explanation of this question by a bottom up approach ..Can you explain it by a Top down ?
@shubhammishra12252 жыл бұрын
Now this question become Leetcode medium. Still Dope mask and video.
@sandeep-rai072 жыл бұрын
Awesome explanation
@bhargavlokinindi18955 жыл бұрын
You are awesome man, Neat & clear, keep it up bro
@Coolguylht3 жыл бұрын
I notice that you didn't use length + 1 for dp array this time, but for some other questions like number of coins and decoded ways all used length + 1 may I ask why this is otherwise?
@FrankLi925 жыл бұрын
Do we need to create a new array? Can we overwrite the current array for O(1) space?
@brijeshtiwari13574 жыл бұрын
Can we sort this array first and then start adding non adjacent elements from n-1 ?
@christianrascioni81784 жыл бұрын
If you sort the array first, you lose the original order and don't know what houses are adjacent anymore
@shubhoch23683 жыл бұрын
Hey, first of all I really like your videos the way you approach a dp problem makes it so soo simple. Thank you! Can you please make a video on Leetcode problem number 152, I just want to know how you will approach that problem in case you have time to do so!
@Plopcorn023 жыл бұрын
Kevin how many years of experienced have you had as a coder for using Java. Im intrested.
@Matt-xq6ow3 жыл бұрын
I'm confused by the solution, can someone explain? I'm stuck understanding: dp[i] = Math.max(nums[i] + dp[i-2], dp[i-1]); Doesn't this mean we possibly have the chance of selecting an adjacent house instead of every other house?
@ishikanagar32363 жыл бұрын
loved it!
@mayankdixit4014 жыл бұрын
My greatest achievement was that I was able to find that it is a dp problem. Now I can relate to the solution, thanks :)
@KevinNaughtonJr4 жыл бұрын
Nice!!!
@marlegagaming12743 жыл бұрын
man, you made it look so easy...
@vkRonaldo972 жыл бұрын
can someone explain how this works with [4,1,1,4]
@tomiwaolasoko72915 жыл бұрын
Thanks, great solution!
@yicai75 жыл бұрын
Omg I really like ur bgm at the beginning!!
@KevinNaughtonJr5 жыл бұрын
thanks Yi!
@anurag19083 жыл бұрын
Just WOW!!!
@我願榮光歸香港-k5o5 жыл бұрын
Thank you! Really explained my struggles.
@tavleenkaur69415 жыл бұрын
Hey Kevin, your videos are very insightful and helping alot of people like me prepping up for the interviews. One thing I’d like to point in this question is that Is DP even necessary here? The first intuition that hit my mind when I read the question was to take the sum of the entire array (sum) and sum of all the alternate elements beginning from 0 (i.e. element at index 0 ,2, 4, till n-1 or n-2), lets call it X. The answer should be max(X , sum-X). Please let me know if there is something wrong in this approach ?
@darkcaper7035 жыл бұрын
[2,1,1,2] -> u need to rob 1st and last to get maximum
@sunittechjourney96404 жыл бұрын
What did you do on line 13? int[] dp = new int[nums.length] ? What is that?
@lazycoder19103 жыл бұрын
It's java 😂
@AhmadHassan-de9xo4 жыл бұрын
What if my sack where i put the money has a certain weight, and with each house's money there is a weight bounty i have to take into consideration, how would the program change ?
@HarinathSrinivas5 жыл бұрын
Hey, the question you have solved is, "maximum sum in an array such that no 2 elements are adjacent". I was asked this question in an interview, tell me how to solve this. Given an array and an int value K, find Maximum sum of numbers, such that no 2 elements are adjacent and sum not greater than K.
@RohanDaDev4 жыл бұрын
damm
@CoolnesXcore4 жыл бұрын
If you want to save some extra space, we can just add the elements to the nums array. :)
@masoomraza51553 жыл бұрын
Thank you you are a life saver
@ayeshaadhikari61233 жыл бұрын
Thanks a tonne Kevin!
@GURUYATHI5 жыл бұрын
Great Solution..!
@daipayanhati23474 жыл бұрын
strange that the the recursive overlaping subsets gives a heap overflow error; int Max_Rob(vector& nums,int i,int * dp){ if(i>=nums.size()){ return 0; } if(dp[i]!=0){ return dp[i]; } return dp[i] = max(Max_Rob(nums,i+2,dp)+nums[i],Max_Rob(nums,i+3,dp)+nums[i+1]); } int rob(vector& nums) { int dp[120] = {0}; return Max_Rob(nums,0,dp); }
@ashmin36365 жыл бұрын
Good stuff, blud!
@KevinNaughtonJr5 жыл бұрын
thanks Ashhmin!
@MyVegeta4 жыл бұрын
yes i have the same reaction when i understand DB
@DanOhCaptainDaniel5 жыл бұрын
Every time you say "hopefully that's not too confusing" makes me start to assume the explanation you are about to make is going to be confusing haha. I really enjoy your videos, but I think the way you explain for some reason, it does not click for me. Maybe leetcode is still a little too complex for my programming level... I may just have to spend more time looking at the problems myself. Either way, thank you for having the solutions. I hope you answer every leetcode problem so we all have a reference solution for all the leetcode problems! Thank you again.
@cocoarecords5 жыл бұрын
thanks wow well explained and ery clear
@KevinNaughtonJr5 жыл бұрын
Thanks so much happy to hear the explanation made sense :)
@atift54655 жыл бұрын
Ughh this is why I hate DP Problems. They always have a gotcha moment. It either clicks with us or it doesnt. I always had intuition that this was a DP problem before solving it but for some reason went towards the Brute Force and used many edge cases. Its hard to explain what I did and the problem worked for many cases but it failed many other cases. Anyhow, thanks for sharing again Kevin. Great work. Can you explain how you typically come up with solutions or algorithms to DP problems?
@KevinNaughtonJr5 жыл бұрын
That's ok Atif it just takes practice keep working hard! What I normally try and do for dp problems is kinda what I did in this video...I try to think abou the simplest case. So whenever approaching a dp problem (and using bottom-up processing), I try to think about the absolute simplest case and build from there!
@atift54655 жыл бұрын
@@KevinNaughtonJr yea, true. I just need to tackle them more often until I can pick up exactly how to break down each problem into sub-problems. And as you said, it comes easier with practice. As always, thank you so much for this content and for replying.
@KevinNaughtonJr5 жыл бұрын
@@atift5465 Definitely, it's all about practice and anytime Atif thanks for your continued support :)
@ankurgupta46964 жыл бұрын
Nice Explanation:)
@mostlyharmless1613 жыл бұрын
Epic thumbnail btw xD
@nivedhapadmanabhan17945 жыл бұрын
how does the 1st 3 condition making a diff, can we not directly start by setting dp[0] and dp[1]
@shrutee115 жыл бұрын
The first three conditions are called as base conditions where only those situations will hold true. As Kevin has coded, nums has either 0,1 or 2 houses. If your nums is having more than 2 houses, we're gonna use a dynamic programming array and save the intermediate house value at each step. So, we would have to start again from 0, 1, and so on. Hope this helps!
@shilpaas24334 жыл бұрын
It works without those base cases because we anyway have the values saved in the dp array. I was also wondering what made this dynamic programming problem different from the others I've seen from Kevin.
@aashkas5 жыл бұрын
Wow finally a good explanation
@KevinNaughtonJr4 жыл бұрын
thanks!
@heeseung55 жыл бұрын
Nice mask haha made me laugh
@KevinNaughtonJr5 жыл бұрын
Haha thanks happy to hear it :)
@wenzhongtan13584 жыл бұрын
Great explanation! Just a question, we could probably shorten the last line to from dp[nums.length - 1] to dp[-1], right?