Maximal square | Dynamic programming | Leetcode

Sdílet
Vložit
  • čas přidán 26. 04. 2020
  • This video explains a very important dynamic programming question which is the maximal square problem from leetcode #221. This has frequently been asked in interviews. In this problem, you are required to find the largest square formed by a binary matrix and the square should have all 1s in it. We need to return the area of the largest square matrix as our answer. This problem can be solved by depth first search, recursion and backtracking but they will consume a lot of time and so i have shown the intuitive approach to solve this problem by dynamic programming. I have shown the solution using proper examples to develop intuition for DP. CODE LINK is given below. If you find any difficulty or have any query then do COMMENT below. PLEASE help our channel by SUBSCRIBING and LIKE our video if you found it helpful...CYA :)
    CODE LINK: gist.github.com/SuryaPratapK/...

Komentáře • 225

  • @quirkyquester
    @quirkyquester Před 3 lety +32

    "im not sure if you can understand this" and "I hope you are understanding this" haha, love these two quotes haha lol

  • @pl5778
    @pl5778 Před 3 lety +45

    this is probably the best visual explanation i've seen thus far. This is really excellent, the ability to break it down with such simplicity. Subscribed.

  • @charlesbickham6604
    @charlesbickham6604 Před 4 lety +9

    Man I dont how you get answers like this! Been doing the leetcode 30 day challenge with you. Love your way of thinking and understanding! Would love for you to do a video of when to use different approaches like backtracking, sliding window etc!

  • @alperozdamar517
    @alperozdamar517 Před 4 lety +5

    Marvelous solution! I love DP programming and your thought process. Thank you.

  • @quirkyquester
    @quirkyquester Před 3 lety +2

    amazing explanation, thank you! I love how you walk us through your thought process and assume that we don't know what you are talking about.

    • @techdose4u
      @techdose4u  Před 3 lety +1

      Yep I can't assume everyone to understand me completely 😅

  • @ploratran
    @ploratran Před 2 lety

    Thank you this is the easiest explanation I've found so far on the internet for this problem.

  • @mondayemmanuel191
    @mondayemmanuel191 Před 3 lety +6

    You've been a great help in my learning of DSA. Thank you.

  • @rishabhpathak9916
    @rishabhpathak9916 Před 4 lety +4

    The way u explain with examples and all sorts of intutions, helps a lot to understand complex algorithms and codes. Yhank you so much

  • @parthshah6343
    @parthshah6343 Před 4 lety +2

    I have seen your previous videos too, you are one of the best when it comes to explaining solutions!

  • @amitavamozumder73
    @amitavamozumder73 Před 3 lety

    this was so simple, but finding a rectangle was so complicated, we literally converted that to a histogram for each row and calculated that. wish there was a simple dp like this for that problem.

  • @hanieharabzadeh4185
    @hanieharabzadeh4185 Před 4 lety +1

    This channel deserves more subscription. You explained very well . Thanks a lot!

  • @sumitanglekar6309
    @sumitanglekar6309 Před 4 lety +2

    The Best Explanation of DP. Made it look so easy at the end !!

  • @khan.mansoor
    @khan.mansoor Před 3 lety +1

    So underrated but such a useful video with very clear explanation. I was able to solve a related problem after watching the video halfway. Thank you so much.

  • @dragonindian1
    @dragonindian1 Před 3 lety +3

    You are doing awesome job, i have refered other video where people just memorize and repeat, you understand and explain things. Very helpful. Keep doing the good work.

  • @robinofautumn99
    @robinofautumn99 Před 3 měsíci

    Thankyou for such an amazing video!!

  • @ankitkumaryadav562
    @ankitkumaryadav562 Před 3 lety

    Nice Explanation you are doing great job.................:)

  • @SujeetKumar-hh5jz
    @SujeetKumar-hh5jz Před 3 lety +2

    Even beginners can understand DP , the way you explain is soo good.

  • @ronitdhingra4395
    @ronitdhingra4395 Před rokem

    As always...the best explanation available on youtube.....Thanks a lot surya...
    TechDose, helping us learn DS and get jobs since 2019:)

  • @vivekswami2182
    @vivekswami2182 Před rokem

    Love the explanation man !!

  • @ankurgupta4696
    @ankurgupta4696 Před 4 lety

    thanks a lot for explaning such a hard problem in a easy way:)

  • @alokbhowmik3547
    @alokbhowmik3547 Před 2 lety

    Awesome explain bror 👍👍

  • @mrinalraj7166
    @mrinalraj7166 Před 4 lety +1

    Hi TechDose, Congratulations on making such a beautiful video. You always succeed in making a deeper dive into the concept behind a solution.

  • @SexyAnvesha
    @SexyAnvesha Před 3 lety +1

    You simplified the problem, very well explained. thanks!!

  • @nehasomani3446
    @nehasomani3446 Před 2 lety

    Really good explanation!! Thanks a lot!

  • @amityanarayan8808
    @amityanarayan8808 Před 2 lety +1

    Awesome thanks! By far a detailed explanation. Subscribed for more.

  • @kitkarson4226
    @kitkarson4226 Před 3 lety

    I was super confused how to solve the problem. You gave me a nice hint. Thanks.

  • @testtest674
    @testtest674 Před rokem

    hi , please could you tell me how to find the indexes where the square matrix begins ?

  • @savy9554
    @savy9554 Před 2 lety

    Amazinggg sir 🙏🏻

  • @shahjaysheeldipalbhai207

    excellent explanation

  • @sahilanand30
    @sahilanand30 Před 2 lety

    Best explanation 🔥

  • @kanishkagupta5801
    @kanishkagupta5801 Před 4 lety +24

    This type of approaches are far beyond our thought. How to proceed for this kinda questions?

    • @evgeni-nabokov
      @evgeni-nabokov Před 4 lety +12

      Practice, practice, sis... Train your sense of determining the problem is solved by applying DP (1 dimension or 2 dimensions, or even more), and then follow some formal steps: what is a sub problem, what is recurrent formula, what are the initial values, which way to fill the table where is the answer in the table.

    • @techdose4u
      @techdose4u  Před 4 lety +13

      You will need a lot of practice to identify solution for these questions :)

    • @Siva-lx9dw
      @Siva-lx9dw Před 3 lety

      @@techdose4u how to practice??

    • @toksdotdev
      @toksdotdev Před 3 lety +5

      @@Siva-lx9dw Solve more questions and explore different solutions to a problem.
      Before solving a problem, you can try to come up with a solution (especially when your interview is far away).
      Also, once you see a solution to a problem, don't just move on. Analyze why the solution works the way it, and compare it to how you were approaching the problem in the first place (even though you never arrived at the solution).
      Analyze the data structures used, and question why that specific data structure was used, and if you could solve it with an alternate data structure.
      In summary, analyze solutions, and ask your self why it works the way it works. Try to code the implementation (this is also one way to learn deeply why a solution works).

  • @rahulreddy7484
    @rahulreddy7484 Před 4 lety +2

    No words to appreciate ur xplaination.

  • @aakashparmar3999
    @aakashparmar3999 Před 2 lety

    What a great explanation!!

  • @saitejam3769
    @saitejam3769 Před rokem

    Such a great programmer and the way of explanation is very nice we want more videos like this. sir try to make videos on recursion.

  • @rahulchudasama9363
    @rahulchudasama9363 Před 3 lety +1

    Nice explaination ...

  • @bulb_blub
    @bulb_blub Před rokem +1

    Your videos have been helping me out a lot. Just wanted to say thanks

  • @neelsoni13062
    @neelsoni13062 Před rokem

    Amzing Sir.

  • @avikmallick2493
    @avikmallick2493 Před 3 lety +1

    Tech dose has become my daily dose

  • @mohammadumaidansari6617
    @mohammadumaidansari6617 Před 3 lety +1

    Clear Explanation ! 👌👨‍💻

  • @shivatrivedi6964
    @shivatrivedi6964 Před 2 lety

    u r amazing.....thnku

  • @francesn7715
    @francesn7715 Před 3 lety +2

    You make the best explanation videos for leetcode, hands down. Please make a video for #31 Next Permutation

    • @techdose4u
      @techdose4u  Před 3 lety

      Thanks. I will try to make it soon :)

  • @Official-tk3nc
    @Official-tk3nc Před 4 lety

    Great explanation brother proud to be an indian:)

  • @Usurperhk
    @Usurperhk Před 3 lety +1

    Best explanation of the problem. Hat's OFF......

  • @saunaknandi1814
    @saunaknandi1814 Před rokem

    so talented bruhh

  • @indsonusharma
    @indsonusharma Před 4 lety +2

    Ye pyaar nhi toh aur kya hai !
    Amazing video bro 👌

  • @shyamprakashm6325
    @shyamprakashm6325 Před 4 lety +1

    Thanking you bro ..it is very much helpful to me in the views of placement ..keep posting bro..😍😍😍😍

  • @adarshagrawal5858
    @adarshagrawal5858 Před 3 lety +1

    Good Problem hard to think !!

  • @Paunitza
    @Paunitza Před 3 lety +1

    Very good explanation. Thank you!

  • @biharichawal5412
    @biharichawal5412 Před 2 lety +1

    Thanks for help with this question, your explainations are really good

  • @hussainrangwala1078
    @hussainrangwala1078 Před 3 lety +1

    Very well explained. Thanks!!

  • @pixlphotography5982
    @pixlphotography5982 Před 2 lety

    can u explain why we take min from three directions??

  • @TP-xt4sv
    @TP-xt4sv Před 3 lety

    excellent.

  • @JamesHalpert8555
    @JamesHalpert8555 Před 4 lety +1

    Very nice explanation!!! Thank you!!

  • @akashskumar99
    @akashskumar99 Před 2 lety

    great job;
    but u could have done it with just m*n dp instead of m+1*n+1 dp by hard coding top row and left column as default values of original matrix avoiding confusion

  • @aviligondagowtham1153
    @aviligondagowtham1153 Před 4 lety +11

    Sir can u tell more problems on dynamic programming concepts bcz so many placement questions asked on this basis

    • @techdose4u
      @techdose4u  Před 4 lety +23

      I will make a separate video on common patterns in dynamic programming questions. This will help you figure out the approach more in depth.

    • @ankitpaul723
      @ankitpaul723 Před 3 lety

      @@techdose4u Thanks! waiting for that video!

    • @clairekowalsky4913
      @clairekowalsky4913 Před 3 lety

      Hi, @TECH DOSE Were you able to make this video? Sorry for pestering you, but it would be really helpful if someone could provide a link to this if he has made it.

  • @techwills4619
    @techwills4619 Před 3 lety

    I had some hard time fully understanding the DP approach so I managed to come up with another way to solve it in O(Nrows * Ncols) time and O(Ncols) space. The idea is to reuse what we learned with largest rectangle of 1s in a matrix. Once we get a histogram, just look for a square with side equal to (1 + current maximum side). I may make a video of it on my channel

  • @aayushpagare9366
    @aayushpagare9366 Před 10 měsíci

    Amazing

  • @shantanujoshi3863
    @shantanujoshi3863 Před 2 lety

    Awesome

  • @prakhyat2001
    @prakhyat2001 Před 11 měsíci

    GOD Level explanation

  • @sakthim7160
    @sakthim7160 Před 4 lety +1

    Clean and clear explanation!

  • @paragroy5359
    @paragroy5359 Před 3 lety +1

    Nice explanation sir...you are doing a great job

  • @pramodkumarramasani5327
    @pramodkumarramasani5327 Před 3 lety +1

    Great explanation

  • @ace-xxx
    @ace-xxx Před 4 lety +2

    you explain every problem very nicely.......can you please make a series of important questions for placement.

    • @techdose4u
      @techdose4u  Před 4 lety +1

      I have already told that questions which you find on interviewbits are already sorted in order of importance. I will make my own set of problems once I get my website running. But it will not be soon. So, I suggest you to start interviewbits

  • @piyushdasila6129
    @piyushdasila6129 Před rokem +1

    good explanation!!!

  • @ankitghosh9873
    @ankitghosh9873 Před 2 lety +1

    wowwwww what an explanation!!!!!!!!!

  • @sase1017
    @sase1017 Před 4 lety +1

    very good and detailed solution, thanks

  • @rahulvutukuri9254
    @rahulvutukuri9254 Před 3 lety

    please do provide lnks for JAVA solutions if possible, you are doing great job Thanks

  • @SFsachin
    @SFsachin Před 4 lety +1

    Lit🔥🔥 great video!

  • @codingwithanonymous890

    Sir how to do recursiveky

  • @sagarsingh-wb8ou
    @sagarsingh-wb8ou Před 2 lety

    Hi , Can someone explain in first way how he is using dfs??

  • @akashtyagi7182
    @akashtyagi7182 Před 4 lety +1

    Crisp and clear explanation. Thanks !
    All of your videos are of great help. If you would like I can contribute to Python solutions of your videos. Github repo will be a good idea.

  • @rohitkumar2984
    @rohitkumar2984 Před 4 lety +1

    1st row and 1st column is not necessary in dynamic 2d array. We can take a 2d dp array of same size as input and fill it's 1st row and 1 column separately by the elements same as present in input array and then we can follow the same approach as mentioned in the video to fill other rows and columns.

  • @singhsaab7121
    @singhsaab7121 Před 2 lety

    Why we just checked dp [i-1][j-1] == 1 and not other two cells in if condition?

  • @jpnr8
    @jpnr8 Před 3 lety +1

    awesome bro!

  • @hoyinli7462
    @hoyinli7462 Před 2 lety +1

    great diagrams!

  • @anshularora2073
    @anshularora2073 Před 3 lety +1

    best explanation... thankyou

  • @chris.w391
    @chris.w391 Před 3 lety +1

    Nice explain, thanks!

  • @adityarathi3420
    @adityarathi3420 Před 3 lety +1

    Thanks sir :-)

  • @backslash8874
    @backslash8874 Před 4 lety +3

    Awesome explanation.
    I don't know how can anyone dislike it.

  • @financewithsom485
    @financewithsom485 Před 4 lety +1

    Mind blowing approch

  • @MrDheeraj14
    @MrDheeraj14 Před 3 lety +1

    very well explained!

  • @akhilak2084
    @akhilak2084 Před 4 lety +1

    Now I knew when I saw the question that it's got something to do with DP. But I froze at the thought of coding a DP solution. What do you recommend to practice in/read for getting more confident?

    • @techdose4u
      @techdose4u  Před 4 lety +1

      Both reading and practice will help. But the imp thing is to notice dp patterns, where to use and where not to. Observing is important.

    • @akhilak2084
      @akhilak2084 Před 4 lety +1

      Thank you sir 😊

    • @techdose4u
      @techdose4u  Před 4 lety +1

      Welcome :)

  • @bhavyanayyer3391
    @bhavyanayyer3391 Před 2 lety

    sir pls check this solution not working in interviewbit

  • @yitingg7942
    @yitingg7942 Před 3 lety +1

    Wow, thank you so much Sir ! I can understand it lol..

    • @techdose4u
      @techdose4u  Před 3 lety

      Welcome :)

    • @yitingg7942
      @yitingg7942 Před 3 lety +1

      @@techdose4u I found out that for a problem if I watched your video, I can remember the solution for a Longgg time, if watch other's video I will forget the solution the next day. 😂

    • @techdose4u
      @techdose4u  Před 3 lety

      @@yitingg7942 keep watching our videos ❤️

  • @designandcraft
    @designandcraft Před 4 lety +1

    very helpful video...

  • @harshalgarg1149
    @harshalgarg1149 Před 3 lety +1

    Thanks.

  • @one_minute_iitian_ai
    @one_minute_iitian_ai Před 4 lety

    Hi Sir,
    Your explanation is crystal clear. 😊
    Can you please tell me the name of Recording application?
    I tried to Google but didn't find any recorder as good as this.
    Reply reply 😊

  • @madhvansharma5917
    @madhvansharma5917 Před 3 lety +1

    Hi, I don't think we needed a dp matrix of size [n+1]*[n+1]. I think dp[n][n] would have worked. BTW love your videos :)

  • @spetsnaz_2
    @spetsnaz_2 Před 4 lety +3

    I tried solving this problem using DFS and got TLE on last 3 test cases on LEETCODE as you said, but got accepted in GEEKSFORGEEKS 😜

    • @techdose4u
      @techdose4u  Před 4 lety +1

      😅

    • @crimsoncad3230
      @crimsoncad3230 Před 4 lety

      How did you solve using DFS???

    • @spetsnaz_2
      @spetsnaz_2 Před 4 lety +3

      @@crimsoncad3230 I just checked if encountered 1, then dfs from that location and incresed the count diagonally and check whether all are 1s in that square
      here is my code
      bool isSafe(int i, int j, vector grid){
      if(i= grid.size() or j= grid[i].size())
      return 0;
      return 1;
      }
      int dfs(int i, int j, int count, vector grid){
      //check diagonal right is 1 or not
      if(!isSafe(i+1, j+1, grid)){
      return count*count;
      }
      //then check for max size of square formed
      for(int k=0; k ans ? curr : ans;
      }
      }
      }
      return ans;
      }

    • @aayushpagare9366
      @aayushpagare9366 Před 3 lety

      should have memoized then

  • @tanishqgupta1071
    @tanishqgupta1071 Před 4 lety +1

    Nice explanation 🙂

  • @rajesh1341
    @rajesh1341 Před 4 lety +1

    Thank you. your video helped me solved the problem. But I feel I am lacking so much more. Can anyone please tell me how do I improve dynamic programming problems? Can you recommend any resources? These DP problems are lowering my confidence day by day.

    • @techdose4u
      @techdose4u  Před 4 lety

      Don't be down. It's just a matter a time when you pick them. DP is always tricky 😅

    • @rajesh1341
      @rajesh1341 Před 4 lety +1

      @@techdose4u Thanks for kind words :) I started leetcode with "30 days challenge" only. out of 26 problems I was able to solve only 16. Remaining times, I had to look for explanations and understand and submit. So I was looking for help if I need to prepare and understand something, before answering leetcode solutions.
      Bytheway your explanation is so crisp than many other foreigner leetcode videos. They directly jump to code.

    • @techdose4u
      @techdose4u  Před 4 lety

      I don't find meaning in explaining code. The important thing is how you thought about that process. Practice is always good. 16 is better than 15. You did well. You will only improve from here on. So don't stop. Keep practicing :)

  • @oyeshpatel8791
    @oyeshpatel8791 Před 4 lety +1

    Which would you suggest to learn dp?

    • @techdose4u
      @techdose4u  Před 4 lety

      Pardon? I think you want to know what to learn. Keep practicing dp questions. As you practice, keep searching about each and reason for a step. In this way, you will learn dp.

  • @MakrandPatil17
    @MakrandPatil17 Před 3 lety

    Why are you checking dp [i-1][j-1] == 1 in if condition ??

  • @SHASHANKRUSTAGII
    @SHASHANKRUSTAGII Před 3 lety +2

    dp is very beautiful

  • @hritikagarwal7676
    @hritikagarwal7676 Před 3 lety

    what is the intuition behind using "min" in these elements?

    • @saptarshidas488
      @saptarshidas488 Před 3 lety

      The idea is to check if there are occurrences of 0s in any of the past adjacent cells. Say you are currently at i = 3, j = 4 of the above example.
      If you take min of past adjacent cells, and it comes out as 0 then it means that a 2×2 square matrix CANNOT be formed.
      If you have min as 1 that means 3×3 matrix of 1s cannot be formed, here only a 2×2 is possible.

  • @vrushabh_kulye7060
    @vrushabh_kulye7060 Před 4 lety +1

    i also solved this question by dp, it seems easy for me...still i watch your all videos to get better understanding 😄😄

  • @sudhamahajan2272
    @sudhamahajan2272 Před 3 lety +2

    what if we had to find rectangle instead of square??

    • @saptarshidas488
      @saptarshidas488 Před 3 lety

      Well, a rectangle can be thought of as combination of 2 or more squares in the matrix. So we have to find continuous ccurrences of 2s or 3s or any higher number in a row of this DP matrix.
      We may take a counter "c" initialised to the first occurrence of a number >=2 in each row. And then increment it by one as an when we find more continuous occurrences of that number in the same row. We compute the area of a possible rectangle in each row traversal and store this value in a max variable. The area can be calculated as: counter × largest

  • @bitrish34
    @bitrish34 Před 3 lety +1

    🔥🔥

  • @rajeshbammidy180
    @rajeshbammidy180 Před 4 lety

    I think we can do it like the way we solve "Largest square in a histogram"

    • @rishabhshukla5719
      @rishabhshukla5719 Před 3 lety

      How?

    • @rajeshbammidy180
      @rajeshbammidy180 Před 3 lety

      @@rishabhshukla5719 If you are aware of finding largest rectangle in a binary matrix you can apply the same logic(with some changes ofc)

  • @Analogue-India
    @Analogue-India Před 4 lety +1

    Please sir, make a video on problem Game of two stacks of hackerrank

    • @techdose4u
      @techdose4u  Před 4 lety

      I have added this problem in my already long todo list. Will make it as soon as I get time for sure.

    • @Analogue-India
      @Analogue-India Před 4 lety

      @@techdose4u Thank you sir