Video není dostupné.
OmlouvĂĄme se.

Dynamic Programming 1D - Full Course - Python

SdĂ­let
VloĆŸit
  • čas pƙidĂĄn 6. 08. 2024
  • 🚀 neetcode.io/ - A better way to prepare for Coding Interviews
    Checkout my second Channel: @NeetCodeIO
    đŸ„· Discord: / discord
    🐩 Twitter: / neetcode1
    ⭐ BLIND-75 PLAYLIST: ‱ Two Sum - Leetcode 1 -...
    💡 DYNAMIC PROGRAMMING PLAYLIST: ‱ House Robber - Leetco...
    0:00 - Intro
    1:05 - Climbing Stairs
    19:03 - Min Cost Climbing Stairs
    38:16 - House Robber
    48:45 - House Robber II
    58:58 - Longest Palindromic Substring
    1:07:00 - Palindromic Substrings
    1:21:51 - Decode Ways
    1:37:08 - Coin Change
    1:56:23 - Maximum Product Subarray
    2:11:46 - Word Break
    2:27:06 - Longest Increasing Subsequence
    2:45:20 - Partition Equal Subset Sum
    #neetcode #leetcode #python

Komentáƙe • 164

  • @NeetCode
    @NeetCode  Pƙed rokem +31

    🚀 neetcode.io - Get access to every current and future course I ever create.
    Spreadsheet from the video: docs.google.com/spreadsheets/d/1A2PaQKcdwO_lwxz9bAnxXnIQayCouZP6d-ENrBz_NXc/edit?usp=sharing

    • @hakeemdhayal8433
      @hakeemdhayal8433 Pƙed rokem +1

      Hi Mr NeetCode dude, I just wanted to ask, do you have tier pricing that changes based on the country? For example, there are developing countries in Africa that generally tend to have a lower pricing since the $ is extremely high to the ZAR - South African Rand. There are other countries as well that would struggle. Do you intend on having a way to assist us too? I'm asking because you're having a launch sale and perhaps by the time you even get a chance to consider different tier pricing based on different countries it may be too late :( Do know however, I'm extremely grateful for the existence of NeetCode and everything that you've done!

    • @mybuddy11
      @mybuddy11 Pƙed rokem

      Dear Neetcode, Could you please publish a video full course on graph theory

  • @sherazdotnet
    @sherazdotnet Pƙed rokem +110

    I'd like to share a few points. With DP, one of the main challenge is how do you recognize a problem is indeed a DP problem. It can be misleading at times that a given problem is indeed a DP problem.
    Therefore, I'd say that this course and more upcoming DP parts that you might be posting, would be great if you start each question with pure analysis of why this problem is a DP problem to begin with. Taking a view on the question as if it has never been seen and then you apply contain ideas to identify if its a DP problem or not.
    The reason I'm bringing this point is because it just so happened that one of my friend shared his experience with me that he had a few years ago where during interview, he thought the problem is a DP and after 25 mins in the interview, he realized that's its not but he had waisted essentially all the critical time.
    Long story short, would be great that for every question, would be great to talk about what attributes of such problem made it obvious that its a DP problem.

    • @emmanuelu
      @emmanuelu Pƙed rokem +2

      Facts. for me personally almost every question i do im always trying to look for a dp solution but i dont really know if it is a dp problem

    • @davesmith5043
      @davesmith5043 Pƙed rokem +10

      I get your point and I agree but I believe it's one of those things that you have to build an intuition for, in other words, it comes with practice.

    • @mrmotomoto
      @mrmotomoto Pƙed rokem +5

      In an algorithms class one first learns about greedy algorithms, then memoization before moving into DP. I think this helps build an intuition. So anyone looking to gain intuition about when DP is applicable may benefit from reading up on those concepts first, especially memoization.
      That said, the first example of the fibonacci sequence is a good start. Think of times where work has to be repeated because future calculations require the work of previous steps, as in the fibonacci sequence. With memoization, instead of re-calculating every step, we can save the results at each step and recall the solution in future function calls to speed up the time needed.

    • @ktm00072
      @ktm00072 Pƙed rokem +12

      Take this as how to recognise the problem is a DP:
      1. With pen & paper, do the problem have sub-problems?
      2. Does the sub-problems return similar value or in a pattern that will be used for next iteration(sub-problem)?
      If it is, then try to solve this way:
      1. you can follow tabulation(array to store data) or memoisation(hashSet or hashMap).
      2. Sometimes the problem may not ask for the dp array or dp hash, then you may use two variables(think these as pointers that may need to update at each iteration). At the end return the value.

    • @RandomShowerThoughts
      @RandomShowerThoughts Pƙed rokem

      Good question, another one that I have is how do we come to understand that there is a binary algorithm at place? Either we take the current value or we do not? It would appear that we could just loop through all possible options (except the current one), which would still work, but be slower and get a TLE on leetcode

  • @temik26
    @temik26 Pƙed rokem +85

    You're doing amazing work for all who wants to be good at algorithms and pass interviews. Mad respect!

  • @mohammedumarfarhan9900
    @mohammedumarfarhan9900 Pƙed rokem +104

    Thanks a lot brother. May God bless you abundantly

  • @zizzlindawg1847
    @zizzlindawg1847 Pƙed rokem +14

    This is amazing, thanks for all the work you do.

  • @peekaboo6026
    @peekaboo6026 Pƙed rokem +14

    Ohhh neetcode only if I could express how much I owe you for improving my problem solving skills

  • @alexgabriel5877
    @alexgabriel5877 Pƙed rokem +7

    great stuff! hope for other topics covered the same way!

  • @bubblesort8760
    @bubblesort8760 Pƙed rokem +2

    The best timing. Ä° was in need of this. Thank you so much Sir.

  • @ruiqiyin3847
    @ruiqiyin3847 Pƙed rokem +2

    This is what I'm looking for! Thank you!

  • @reebaqureshi9079
    @reebaqureshi9079 Pƙed 11 měsĂ­ci +2

    I've been watching your videos so much through my interview preparations that your voice sounds like a mother's lullaby to me at this point.

  • @jonathanpangilinanjr.9905
    @jonathanpangilinanjr.9905 Pƙed rokem +1

    Thank you very much for this video. I finally solved my very own medium dp lc after watching a quarter of your video. I'm gonna finish this and hopefully, I can stand on my own feet after.

  • @RohitRavula
    @RohitRavula Pƙed rokem +1

    Thanks a lot, We need more such full course vedios on each module, It really helps

  • @house0795
    @house0795 Pƙed rokem +2

    I agree, climbing stairs was indeed explained top notch.

  • @curosity276
    @curosity276 Pƙed rokem +2

    I really appreciate your work, your explanation really works

  • @amospan14
    @amospan14 Pƙed rokem +1

    Dude this is amazing material! Thank you so much for the education and your teachings! When I get a job, Ima have to take you out for lunch! Truly appreciate your work buddy =)

  • @Hossein118
    @Hossein118 Pƙed rokem +2

    Absolutely love your content. It’s so neet and easy to follow for the layman. Do you have a Rumble channel as well?

  • @utkarshdewan8736
    @utkarshdewan8736 Pƙed rokem +2

    Oh my man this was so needed thankyou so much sir ❀

  • @jessanraj9086
    @jessanraj9086 Pƙed rokem +2

    I Really appreciate these efforts you are taking manđŸ”„

  • @mikkiverma9545
    @mikkiverma9545 Pƙed rokem +1

    Thanks neetcode eagerly waited for this, Hope u will upload this type of content more.

  • @pawanchaturvedi8973
    @pawanchaturvedi8973 Pƙed rokem

    Oh my God ! Can't thank you enough. Thank you so much for this

  • @tofahub
    @tofahub Pƙed rokem

    Watching this in the weekend. I can't be happier

  • @harryzachariou1
    @harryzachariou1 Pƙed rokem

    Absolute legend for this!

  • @Vishal_84_k
    @Vishal_84_k Pƙed rokem +3

    Waiting for this ,best explaination ever đŸ’„đŸ’„

  • @the8426
    @the8426 Pƙed rokem +1

    I love this, Thank you! Can you do the same for dfs and bfs algorithms?

  • @krishnamohantiwari1140
    @krishnamohantiwari1140 Pƙed rokem +4

    Amazing!! Waiting for 2D DP :)

  • @rohithboppey3205
    @rohithboppey3205 Pƙed rokem +1

    I'm not sure who needs this, but I guess we can use the similar format for all 1D problems-
    class Solution {
    public:
    int solve(vector& ways, int n, int start){
    if(start >= n){
    // no way to reach the end
    return 0;
    }

    if(ways[start] != -1){
    // already calculated
    return ways[start];
    }

    // not cal
    // need to cal

    // it always depends on the next problem
    return ways[start] = solve(ways, n, start + 1) + solve(ways, n, start + 2);
    }

    int climbStairs(int n) {
    // using the concept of DP
    vector ways(n + 1, -1);

    if(n < 2){
    return 1;
    }

    ways[n] = 0;
    ways[n-1] = 1;
    ways[n-2] = 2;

    // ways means number of ways we can reach the end
    // if the start position is i

    solve(ways, n, 0);
    return ways[0];

    }
    };

  • @chrisogonas
    @chrisogonas Pƙed rokem +1

    So incredible you could put in tonnes of hours into quality work. Thanks for creating this amazing resource.

  • @varadiganesh7389
    @varadiganesh7389 Pƙed měsĂ­cem

    Great stuff... Learnt a lot sir

  • @amandubey5287
    @amandubey5287 Pƙed rokem

    You did it finaly, God Damn, you have no idea what great help you just did, damn bruh you are God sent

  • @saminhasan87
    @saminhasan87 Pƙed 6 měsĂ­ci

    this video helped me a lot. Thanks

  • @khirabdhitanaya8931
    @khirabdhitanaya8931 Pƙed 8 měsĂ­ci

    You. Are. Absolutely. Amazing!!!!

  • @shashankvray9042
    @shashankvray9042 Pƙed rokem

    MY MAN IS BACK

  • @DreamosStudio
    @DreamosStudio Pƙed rokem

    Wow, this is amazing tutorial, DP in many case (n*2) -1 or ( n- n,pow(2)) 😀, great work

  • @undergrad4980
    @undergrad4980 Pƙed rokem +8

    Dear Neetcode, thank you for uploading this. I have been following your content for quite some time and I really appreciate the effort you have put into creating content for DSA. However, I would really appreciate it if you could highlight the core in-depth reason for why such DP patterns exist, and how to identify them. So a template, instead of solutions.

    • @sherazdotnet
      @sherazdotnet Pƙed rokem +20

      DP is used when you have n ways to do something. Here that n is the number of steps you can take. The question can be changed to say you can can take 1 or 2 or 3 steps. Now if you give 20 stairs, you have 3 ways to get there. As you can see there is no straight forward answer. This is where DP comes in the picture. DP allows you to break the problem down into a very very small sub problem. Once you solve small sub problem then next problem builds on top of it.
      So instead of solving to 20 steps, solve it for smaller number. What's the smallest number you can solve it for???? 0. Also in dp questions where we have to count n ways, I find it much better approach to go backwards. Instead of finding ways to get to 20, find ways to get to 0.
      for 3 steps where you are allowed to take 1or 2 steps, it'd look like
      3
      2/ \1
      1 2
      2/ \1 2/ \ 1
      -1 0 0 1
      2 / \1
      -1 0
      Anytime you see 0, you have a positive case meaning that path will yield correct result. If value goes < 0, it means it won't work. So the code will look like
      public int GetCount(int totalSteps) {
      if(totalSteps == 0) return 1;
      if(totalSteps < 0) return 0;
      return GetCount(totalSteps-2) + GetCount(totalSteps-1);
      }
      Then you add memoization to optimize the time but you get the idea.
      Its an amazing concept but once you get a hang of it, you'd feel most satisfied solving these questions.

    • @cupofjava5480
      @cupofjava5480 Pƙed rokem +1

      @@sherazdotnet you're awesome

    • @malikau917
      @malikau917 Pƙed rokem

      @@sherazdotnet thanks bro

  • @09TYPER
    @09TYPER Pƙed rokem +1

    Thanks!Could you do live dynamic programming session , so we can learn from your thought process?Btw( for 02:45:45 ) if the input array is [1,4,11,5} dont [1,4] and [5] is even subsets,even if they are not equal to half of sum of the array?

  • @eddiej204
    @eddiej204 Pƙed rokem +3

    Bro, this is gold.

  • @akhildeshneni9922
    @akhildeshneni9922 Pƙed rokem

    Thank you neetcode 🙌

  • @ujjawalpanchal
    @ujjawalpanchal Pƙed rokem +4

    @neetcode Props on the great video! Are palindromic substrings and longest palindromic substrings relevant to DP? If not, why are they in this compilation?

  • @xzex2609
    @xzex2609 Pƙed rokem +2

    Climbing Stairs can be written in just three lines(instead of five), in python for swapping two variables you don't need a Temp variable, you can use
    a, b = b, a or ( one, two = one + two, one )
    class Solution:
    def climbStairs(self, n: int) -> int:
    one, two = 1, 1
    for i in range(n-1):
    one, two = one + two, one
    return one

    • @longvu7746
      @longvu7746 Pƙed rokem

      For anyone reading this, reason this works is because in python the expressions on the right side of the = sign are evaluated first, therefore one + two and one are calculated based on original values of one and two. Then it assigns the results to one and two on the left side

  • @rustomshroff417
    @rustomshroff417 Pƙed 9 měsĂ­ci

    the two variable approach to solving the decode ways is missing in this video, but really helpful video. Thanks a lot.

  • @rahuldey1182
    @rahuldey1182 Pƙed rokem

    Neetcode is the Hero we dont deserve but the hero we needed. He is the Dark Knight of LeetCode.

  • @svkrtrolls7438
    @svkrtrolls7438 Pƙed 8 měsĂ­ci +1

    great content

  • @jasmin_bheda
    @jasmin_bheda Pƙed rokem

    Love you Neetcode ❀

  • @ErenTal
    @ErenTal Pƙed rokem +2

    Hello everyone!
    I have a question regarding the problem 300 "Longest increasing subsequence". Why didn't we write:
    LIS = [1] * (len(nums)+1) instead of LIS = [1] * len(nums)
    For example, in the previous problem "Word Break" we've used the +1. In which cases do we use the +1 when we define dp and in which cases we do not?
    Thank you

  • @aniquatabassum5428
    @aniquatabassum5428 Pƙed rokem +6

    In the climbing stairs problem, why is the value for the base case 1? If we are at the base case, then there are 0 ways to reach the base case right
.? I realise if we initialise the base case to zero then the code won’t work. I just want to understand what other reason there is for the base case to be one.

    • @SkillR1
      @SkillR1 Pƙed 3 měsĂ­ci

      The original problem is about routes - how many routes can you take.
      from 5 to 5 you can take 1 route
      from 2 to 5 you can take the route that will lead you to 3, or the route that will lead you to 4

  • @abhaytiwari5991
    @abhaytiwari5991 Pƙed rokem

    Well done bro👏👏👏👏👏👏

  • @godmodel33t11
    @godmodel33t11 Pƙed rokem +1

    For the first 1D example, why does the fib sequence start from 1 and not 0?

  • @piyush1342
    @piyush1342 Pƙed rokem

    Love you man you are the best

  • @RajatSoni07
    @RajatSoni07 Pƙed 5 měsĂ­ci

    Very helpfull course, Highly recommended

  • @b9944236
    @b9944236 Pƙed rokem +6

    I paid for the lifetime membership yesterday, but this super long and helpful video is just for free.
    So, goodbye my money, I have to support this cool guy indeed.

    • @CyberMew
      @CyberMew Pƙed rokem

      that's a great pic of Son Ye-jin!

    • @Casanovajosh
      @Casanovajosh Pƙed rokem

      Well, this does not include the 20 mins 1D DP course in his pro member content. Your money is still worth it.

  • @Dishankjindal
    @Dishankjindal Pƙed rokem

    Amazing đŸ‘đŸŒ

  • @psibarpsi
    @psibarpsi Pƙed rokem

    Thanks a lot!

  • @romo119
    @romo119 Pƙed rokem +1

    For problem "decode ways" Doesn't initializing dp[len(s] = 1 mean that null string can be decoded in 1 way? I understand how this works in code but conceptually I don't see how a null string can be decoded

  • @pushkarchaubey8300
    @pushkarchaubey8300 Pƙed rokem

    you are god for me and thanks for these dp course in python🙂🙂

  • @evergreenyoung1181
    @evergreenyoung1181 Pƙed rokem +1

    For the last problem, can someone explain why the time complexity is not 2^n? If all the sum is unique, then the size of set should double each time, thus it's 2^n. Why doesn't this happen?

  • @sharksinvestment9864
    @sharksinvestment9864 Pƙed rokem +1

    Thanks neetcode

  • @qray862
    @qray862 Pƙed rokem

    thank you for the contribution for the human kind.

  • @arno.claude
    @arno.claude Pƙed rokem

    Thanks!

  • @mayursonowal
    @mayursonowal Pƙed rokem

    You’re doing god’s work

  • @mybuddy11
    @mybuddy11 Pƙed rokem +1

    Dear Neetcode, Could you please publish a video full course on graph theory

  • @jamesbotwina8744
    @jamesbotwina8744 Pƙed rokem

    That infinite loop while trying to add to the same set you are iterating through was confusing me. Thanks!

  • @CyberMew
    @CyberMew Pƙed rokem +1

    Is this video a combination of all the previous videos cut together? or is it recut/edited to string together experiences drawn from previous questions?

  • @ionguzun3952
    @ionguzun3952 Pƙed rokem

    Nice video...can u please do a video about sliding window technique

  • @MukulDuttshades
    @MukulDuttshades Pƙed rokem

    Thank youđŸ«‚

  • @sherazdotnet
    @sherazdotnet Pƙed rokem +1

    Here is my solution using Recursion + Memoization. Code is written in c#
    public int CountSteps(int totalSteps, Dictionary memo) {
    if(totalSteps ==0) {
    return 1;
    }

    if(totalSteps < 0) {
    return 0;
    }

    if(memo.ContainsKey(totalSteps)) {
    return memo[totalSteps];
    }

    var usingOneStep = CountSteps(totalSteps-1, memo);
    var usingTwoSteps = CountSteps(totalSteps-2, memo);

    memo[totalSteps] = usingOneStep + usingTwoSteps;
    return memo[totalSteps];
    }

  • @ek_minute_
    @ek_minute_ Pƙed rokem

    Thanks man. Respect from 🇼🇳

  • @user-xp4sl1cc8f
    @user-xp4sl1cc8f Pƙed rokem

    When I see your video I realize the next 3 hours are gonna be coool

  • @347harsha
    @347harsha Pƙed 8 měsĂ­ci

    Thanks Guru. You are my Dronacharya

  • @sophiophile
    @sophiophile Pƙed 2 měsĂ­ci

    2:08:59 why is the third value in the min necessary (just n). cur_max can never be less than 1. If cur_max is 1, its the same as n, if its larger, it's bigger than n.

  • @beyond-convention
    @beyond-convention Pƙed rokem

    Hi
    Your whiteboard is amazing. Which tool do you use for whiteboarding

  • @petervan7372
    @petervan7372 Pƙed 9 měsĂ­ci +1

    13:20, at the last step 5, how many ways to land on the same step land on itself, why 1?

  • @johnmatthewtennant
    @johnmatthewtennant Pƙed rokem

    How is longest palindromic substring dynamic programming?

  • @user-od1hv9dv8p
    @user-od1hv9dv8p Pƙed 6 měsĂ­ci

    I have a question for Maximun Product Subarray. What if the array is just [0], your code will output 1 as u set curMax as 1 by default. However, the ans should be 0 right? Maybe I should deal with this case especially?

  • @AbhishekSingh-vl1dp
    @AbhishekSingh-vl1dp Pƙed rokem +4

    Can't believe he is an Indian đŸ«ĄđŸ˜‚

  • @ryangoodwin9115
    @ryangoodwin9115 Pƙed rokem

    im confused by what i see and what i hear.
    you say the for loop will run until it reaches the beginning of the array. but whats written is -3, -1, -1
    so to my understand, it starts at index -3, then goes back -1 index every iteration, until it reaches the last index -1??
    that makes no sense to me

  • @CreeperFace75
    @CreeperFace75 Pƙed rokem

    Goat

  • @Phantom_Blox
    @Phantom_Blox Pƙed rokem

    thanks for teaching me how to rob a neighborhood efficiently

  • @347harsha
    @347harsha Pƙed 7 měsĂ­ci

    @NeeCode in house robber 2 problem(problem number 213) if the robber starts stealing from house somewhere in middle . is it not separate case we have to consider . so I think for each number in array we have to skip it and execute the helper function

  • @NareshKumar-vy1bi
    @NareshKumar-vy1bi Pƙed rokem

    Hey Neetcode, What app and tool you use for teaching?

  • @sophiophile
    @sophiophile Pƙed 2 měsĂ­ci

    Can we improve the efficiency at 2:24:28 by mutating wordDict into the form where the key is len(word) and the value is a list of all words of that length (no extra space). Then we can check:
    for key in wordDict:
    if i+key in dp and dp[i + key] = True:
    for word in wordDict[key]:
    #check the word
    That way, you eliminate the vast majority of building dp.

  • @pratyushpradhan2612
    @pratyushpradhan2612 Pƙed rokem +3

    For the first problem, why is it that we put 1 in 5. If we are already if 5 and we can either go up by. 1 or 2 then shouldn't the possible step be 0?(As we are already in the solution). Can someone clarify pls

  • @infohub3709
    @infohub3709 Pƙed rokem

    @ 18:53 the code doesn't run well for a higher value of n. I tried with a value of 500,000. It hung.

  • @Felix-lw7wo
    @Felix-lw7wo Pƙed rokem

    In DP for the 5th a stair, why is the value 5 and not 0?

  • @honas908
    @honas908 Pƙed rokem

    how is the palindrome question related to dynamic programming? (Great vids, btw!)

  • @AnkitKumar-jm3cz
    @AnkitKumar-jm3cz Pƙed rokem +1

    Really Awesome work .
    Thank you so much Bro

  • @aishikdalui_0734
    @aishikdalui_0734 Pƙed rokem

    please make a video on recursion and backtracking also

  • @xushenxin
    @xushenxin Pƙed 11 měsĂ­ci

    I didn't quite get it for the house robber 1 problem after watching 2 times. Maybe I failed in one key thought jump.

  • @yaswanthkosuru
    @yaswanthkosuru Pƙed rokem +1

    really learning dp from a google employer is a god grace

  • @s8x.
    @s8x. Pƙed 11 měsĂ­ci

    What’s the difference between this and recursion

  • @dheeraj2729
    @dheeraj2729 Pƙed rokem

    Hey Neetcode

  • @madhumithakolkar_
    @madhumithakolkar_ Pƙed 8 měsĂ­ci

    Brute Forced a super inefficient piece of code :P :
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
    length = len(s)
    for w in wordDict:
    if length==0:
    return True
    while length>=0 and len(w)

  • @intriqet8776
    @intriqet8776 Pƙed rokem

    I’m so confused. The maps generated in the problems all seem to have unique rules that arent clear to me. Feels like I missed a reading assignment maybe or lecture.
    The longest subsequence problem was troubling for me. ace. abcde. The matrix and comparisons sounded so natural but seemed convoluted to me. Why is this more efficient than sequence analyzer? Like the subsequence ace is visible in abcde without needing a map. (Granted I don’t know if that means there is a solution that can be computed more easily)
    These are great I just feel like an idiot cause I feel like I’m doing physics but didn’t learn the kinematic equations or something similar.

  • @Aryan-wl7mc
    @Aryan-wl7mc Pƙed rokem +1

    Legend is back đŸ”„đŸ”„đŸ”„

  • @parkourbee2
    @parkourbee2 Pƙed rokem

    Why is Longest Palindromic Substring considered DP??

  • @intrepidm8753
    @intrepidm8753 Pƙed rokem +1

    love you dude....
    if God is there... God bless you

  • @jackgame8841
    @jackgame8841 Pƙed rokem

    can u make it to run in console?

  • @el1398
    @el1398 Pƙed rokem

    How long will the 25 percent sale last?

  • @shivangitiwari2485
    @shivangitiwari2485 Pƙed 4 měsĂ­ci

    your voice is very appealing.

  • @zizhongtian4100
    @zizhongtian4100 Pƙed rokem

    my dear god plz do more dp thanks!

  • @dheeraj2729
    @dheeraj2729 Pƙed rokem +1

    Recursion with Linked List combined please....