Maximum Product Sub-array (LeetCode 152) | Full Solution with animations and proof | Simplified

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ส.ค. 2024

ความคิดเห็น • 113

  • @nikoo28
    @nikoo28  หลายเดือนก่อน +6

    As of this writing LeetCode added a new test case which cause the above code to fail. The logic is still correct though.
    The test case fails because of overflow error. With just a small fix, the code still works. Have a look at the updated code on my Github link :)

    • @Armaan_Punia_
      @Armaan_Punia_ หลายเดือนก่อน +3

      [0,10,10,10,10,10,10,10,10,10,-10,10,10,10,10,10,10,10,10,10,0] this is the testcase for which it fails; can you tell what the fix is sir?

    • @nikoo2805
      @nikoo2805 หลายเดือนก่อน +1

      @@Armaan_Punia_that is what I exactly did in the updated code. Did you have a look?

    • @Armaan_Punia_
      @Armaan_Punia_ หลายเดือนก่อน +1

      @@nikoo2805 yesterday I had removed what I thought was redundant, 190/191 test cases then passed, now all did! thank you

    • @katerghost642
      @katerghost642 หลายเดือนก่อน +1

      @@Armaan_Punia_ bhai iska answer mille toh reply krdena salla do ghanta ho gya h

    • @unknownman1
      @unknownman1 28 วันที่ผ่านมา

      @@katerghost642 class Solution {
      public int maxProduct(int[] nums) {
      long leftproduct = 1;
      long rightproduct = 1;
      long ans = nums[0];
      for(int i=0; i

  • @tripletgamingbuddies5365
    @tripletgamingbuddies5365 23 วันที่ผ่านมา +3

    for those whose code fails at 191 testcase use the below code
    class Solution {
    public int maxProduct(int[] nums) {
    double maxpro=nums[0],right=1,left=1;
    for(int i=0;i

  • @sayedmahmudulalam2738
    @sayedmahmudulalam2738 10 หลายเดือนก่อน +8

    This is the simplest and most intutive solution.

  • @RajiurRahman1
    @RajiurRahman1 4 วันที่ผ่านมา

    Very simple and easy to understand. I was following another solution which I found a bit difficult to process.
    Thank you, keep up the good work.

  • @ghanashrim2839
    @ghanashrim2839 ปีที่แล้ว +4

    Your explanations are so on point yaar... I've been binge-watching all your videos...!
    Please make more.

    • @nikoo28
      @nikoo28  ปีที่แล้ว

      Thank you so much 😀

  • @yashyadav7017
    @yashyadav7017 2 หลายเดือนก่อน

    bhai tum kya bande ho yaar… when other top teachers and youtubers fail to explain the hardest problems, you explain those problems so easily somehow….. Man you deserve so much appreciation… Great work bhai..so much inspired by you… Really top-notch explanations.

    • @nikoo28
      @nikoo28  หลายเดือนก่อน

      that is so kind of you...please share and support as much as you can :)

  • @subhadippahari185
    @subhadippahari185 ปีที่แล้ว +7

    What an explanation. Really mind-blowing. Saw other videos on the same topic, but this is a really whole different level of logic.

  • @vineetkumar2899
    @vineetkumar2899 ปีที่แล้ว +2

    the way you explain things are just Awesome.

  • @yadneshraut6854
    @yadneshraut6854 2 หลายเดือนก่อน +3

    Understood this logic but it fails at last testcase of leetcode 152 so please update the logic for the testcase and code too........!!! Thank you !!

    • @nikoo28
      @nikoo28  หลายเดือนก่อน +2

      since I cannot edit the video, the code has been updated in the github link :)

    • @yadneshraut6854
      @yadneshraut6854 หลายเดือนก่อน +1

      @@nikoo28 thank you sir !

  • @gopik6202
    @gopik6202 2 หลายเดือนก่อน +1

    class Solution {
    public int maxProduct(int[] nums) {
    if (nums == null || nums.length == 0) {
    return 0;
    }
    int maxProduct = nums[0];
    int currentMax = nums[0];
    int currentMin = nums[0];
    for (int i = 1; i < nums.length; i++) {
    if (nums[i] < 0) {
    // Swap currentMax and currentMin when encountering a negative number
    int temp = currentMax;
    currentMax = currentMin;
    currentMin = temp;
    }
    currentMax = Math.max(nums[i], currentMax * nums[i]);
    currentMin = Math.min(nums[i], currentMin * nums[i]);
    maxProduct = Math.max(maxProduct, currentMax);
    }
    return maxProduct;
    }
    } this is crt logic

  • @tejasavhad4010
    @tejasavhad4010 11 หลายเดือนก่อน +2

    Underrated channel.

  • @hoddybhaba6704
    @hoddybhaba6704 ปีที่แล้ว +3

    Fantastic explaination👏👏👏You deserve more likes, more views and definitely more subscribers!!!

  • @faizuddin4032
    @faizuddin4032 6 หลายเดือนก่อน +1

    Very clean , clear and simple explanation.

  • @rajalakshmirajasekar260
    @rajalakshmirajasekar260 ปีที่แล้ว +5

    Bro ur explanation is awesome!! I am able to think the flow of program and build the intuition easily.. one request bro Plz upload recursion vdos.. Thank you!!

    • @nikoo28
      @nikoo28  ปีที่แล้ว

      i have made several videos that use recursion. Check out the basics here: th-cam.com/video/FTTHkmnvzlM/w-d-xo.html

  • @dipteshdeore2935
    @dipteshdeore2935 3 หลายเดือนก่อน

    Clean , crisp & most underrated !

  • @MinhLe-ks5en
    @MinhLe-ks5en 5 หลายเดือนก่อน

    This is genius. You deserve more likes and more subscribers. I love your systematic way of explaining the reasoning.

    • @nikoo28
      @nikoo28  หลายเดือนก่อน

      Glad you think so!

  • @akhintheruvath
    @akhintheruvath หลายเดือนก่อน

    Crisp and clear explanation. Thank you bro.

  • @andreabad3518
    @andreabad3518 6 หลายเดือนก่อน

    I was really struggling to understand some other solutions for this problem that used dynamic programming, but you really made it simple to understand! Thanks!

  • @jatinkumar4410
    @jatinkumar4410 4 หลายเดือนก่อน +2

    amazing explanation... Thank you

  • @yashbhinwal2801
    @yashbhinwal2801 ปีที่แล้ว +2

    you did a great job explaining this concept, really helpful!!

  • @shreyanshgoel9757
    @shreyanshgoel9757 2 หลายเดือนก่อน +1

    Your solution impies that ans subarray lie either in suffix or in prefix in non zero elements are present

  • @oknokok
    @oknokok หลายเดือนก่อน +1

    simple and exellent explanation

  • @abdulgaffarabdulmalik4333
    @abdulgaffarabdulmalik4333 11 หลายเดือนก่อน +8

    My question is, why does it work?

    • @nikoo28
      @nikoo28  10 หลายเดือนก่อน +2

      please elaborate...

    • @billyfigueroa1617
      @billyfigueroa1617 5 หลายเดือนก่อน +1

      😂

    • @unemployedcse3514
      @unemployedcse3514 2 หลายเดือนก่อน

      answer to ur question is if u observe carefully traversing from left and right indirectly we are calculating product of all sub array and each time storing max subbarray product

  • @maherworld1
    @maherworld1 11 หลายเดือนก่อน +2

    AWESOME! God bless u

    • @nikoo28
      @nikoo28  10 หลายเดือนก่อน

      Thank you! You too!

  • @KhyleSewpersaud
    @KhyleSewpersaud หลายเดือนก่อน

    fantastic solution

  • @maggiesayabie
    @maggiesayabie ปีที่แล้ว +2

    I love your explanation!

  • @samiramousaie1158
    @samiramousaie1158 9 หลายเดือนก่อน +1

    your explanation is awesome. I totally understand it.

    • @nikoo28
      @nikoo28  9 หลายเดือนก่อน

      Awesome, thank you!

  • @user-zl3ju9tt2g
    @user-zl3ju9tt2g 6 หลายเดือนก่อน

    this is the best simple solution even the editorial solution is nothing infront of this

    • @nikoo28
      @nikoo28  5 หลายเดือนก่อน

      glad you feel that way!!

  • @sunshineandrainbow5453
    @sunshineandrainbow5453 17 วันที่ผ่านมา

    OG teacher ❤

  • @stanislavmozolevskiy8346
    @stanislavmozolevskiy8346 3 หลายเดือนก่อน

    I do really like your solution, it is so much easier to understand. Thank you

  • @Max-tq1ig
    @Max-tq1ig 11 หลายเดือนก่อน +2

    Hi, Nikhil! I understand the code and how can you get the answer by using the two comparisons from right and left, but I don't get the logical idea of pointing out that you need to remove the middle number at minute 6:26.
    Is it just an example of what should we get if you keep with odds numbers instead of an even; or just the idea of having more numbers in general? I don't understand x__x
    It's not something to will do automatically by following the code?

    • @nikoo28
      @nikoo28  11 หลายเดือนก่อน +2

      you don't have to remove the middle number, we are just trying to get the maximum product. 2 negatives will give you a positive number, but 3 negatives will give you a negative number again.

  • @jironymojirolamus913
    @jironymojirolamus913 หลายเดือนก่อน

    Great explanation, thanks! I actually solved it in a similar way, but was unsure if it's a way to go since everyone is talking DP nowadays.

  • @avinashabhi95
    @avinashabhi95 ปีที่แล้ว +1

    Your explanation is superb. Subscribed.

    • @nikoo28
      @nikoo28  ปีที่แล้ว

      Welcome aboard! 😄

  • @rahulchandak2772
    @rahulchandak2772 หลายเดือนก่อน

    The logic sounds very simple but its difficult to understand for cases where the subarray does not contain the starting (leftmost) or the ending (rightmost) element. When the sub array is in between the array

  • @amitmandal5842
    @amitmandal5842 8 หลายเดือนก่อน +1

    Excellent explanation. I mean, you made question easy.. valaaaah😊

    • @nikoo28
      @nikoo28  8 หลายเดือนก่อน

      Glad to hear that

  • @abba5102
    @abba5102 4 หลายเดือนก่อน +1

    Very good brother. Thank you.

  • @240SX2pAc
    @240SX2pAc 9 หลายเดือนก่อน +1

    Wonderful solution, thank you

  • @anonymous13378
    @anonymous13378 2 หลายเดือนก่อน

    Too concise... Too the point.... Best explanation.... I can compare you with Striver... Though you are better than him at many places.... ❤

    • @nikoo28
      @nikoo28  2 หลายเดือนก่อน

      Thanks for the view

  • @shushanbalayan6267
    @shushanbalayan6267 ปีที่แล้ว +1

    Great explanation! Thank you

  • @user-dg4vv5ru5h
    @user-dg4vv5ru5h 9 หลายเดือนก่อน +1

    What if all elements are zero. Then it will fail?

  • @cagarwal
    @cagarwal 10 หลายเดือนก่อน +1

    Can you explain why we need to start from both sides? I'm not able to see any benefit in starting from both sides as both eventually gives the same result.

    • @nikoo28
      @nikoo28  9 หลายเดือนก่อน +1

      I don't understand...did you go though my complete video? It cannot be done if we don't go from both sides.

  • @sripoojitha4887
    @sripoojitha4887 7 หลายเดือนก่อน +1

    🎉Great Explaination 😮

  • @hitghitg8747
    @hitghitg8747 4 หลายเดือนก่อน

    Thank you my friend simple and easy

  • @user-he3hs6iy8o
    @user-he3hs6iy8o 2 หลายเดือนก่อน +2

    it fails on the last test case on leetcode

    • @nikoo28
      @nikoo28  หลายเดือนก่อน

      since I cannot edit the video, the code has been updated in the github link :)

  • @jnayehsirine6222
    @jnayehsirine6222 2 หลายเดือนก่อน

    I LOVE UR CHANEL

  • @ashwinnair1035
    @ashwinnair1035 5 หลายเดือนก่อน

    Great explanation sir

  • @ankitvyas8534
    @ankitvyas8534 2 หลายเดือนก่อน

    what if there is no positive element in the array?

  • @ashoksaipudi6999
    @ashoksaipudi6999 10 หลายเดือนก่อน +1

    Hey actually its such a good explanation. but one mistake in explanation of 2nd testcase(2:10 min) there you don't take the contigous sub-array.

    • @nikoo28
      @nikoo28  10 หลายเดือนก่อน +1

      i do take the contiguous sub-array

  • @Rfcs1.6
    @Rfcs1.6 4 วันที่ผ่านมา

    this code not run in leetcode

  • @Jaydoshi77
    @Jaydoshi77 22 วันที่ผ่านมา

    op explanation👌

  • @acceleratedofficial1576
    @acceleratedofficial1576 3 หลายเดือนก่อน +2

    Failed or -1, 0,-3

    • @jiddu99
      @jiddu99 2 หลายเดือนก่อน +1

      How ? It passed i got 0

    • @nikoo28
      @nikoo28  หลายเดือนก่อน

      yes, it will pass...and you will get 0

  • @Shrutimmmmm
    @Shrutimmmmm 3 หลายเดือนก่อน

    U shud also include bruteforce solutions

  • @powerwithin1367
    @powerwithin1367 2 หลายเดือนก่อน +1

    wrong hai solution
    leetcode per 190 testcase fail ho raha

    • @unknownman1
      @unknownman1 2 หลายเดือนก่อน

      they have updated the test cases.

    • @nikoo28
      @nikoo28  2 หลายเดือนก่อน

      thanks for letting me know...I will update the code accordingly

  • @kesharwani.prashant
    @kesharwani.prashant 7 หลายเดือนก่อน

    Looks like stiver copied your exact logic:) Thanks for explaining it so clearly !

  • @tanugiri532
    @tanugiri532 5 หลายเดือนก่อน

    Thankyou sir ❤

  • @user-ph5ek8tg5l
    @user-ph5ek8tg5l 2 หลายเดือนก่อน

    Code Failed for nums =[0, 10, 10, 10, 10, 10, 10, 10, 10, 10, -10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0]
    Your code is also failing on LeetCode. This test case seems to be added recently. Due to overflow the answer is coming wrong. Even though leetcode has said the final answer is within the int range but the intermediate values in calculation are overflowing even the long range.
    Below code changes will fix the issue.
    long leftProduct = 1;
    long rightProduct = 1;
    long ans = nums[0];
    leftProduct = (leftProduct == 0 || leftProduct < Integer.MIN_VALUE) ? 1 : leftProduct;
    rightProduct = (rightProduct == 0 || rightProduct < Integer.MIN_VALUE) ? 1 : rightProduct;
    return (int) ans;

    • @nikoo28
      @nikoo28  2 หลายเดือนก่อน

      yes, that seems to be a newly added test case. I will update the code accordingly. Thanks for your contribution 😄

  • @TanishaVarshney-ti9yl
    @TanishaVarshney-ti9yl 5 หลายเดือนก่อน

    i understand the question and solution everything completely but on submitting it on leetcode after checking it twice it says wrong answer don't know why could you please tell me?

    • @nikoo28
      @nikoo28  5 หลายเดือนก่อน +1

      Check out the complete code on my github. Link in description. That should give you a hint.

    • @TanishaVarshney-ti9yl
      @TanishaVarshney-ti9yl 5 หลายเดือนก่อน

      @@nikoo28 i have tried that too but its also not working

    • @TanishaVarshney-ti9yl
      @TanishaVarshney-ti9yl 5 หลายเดือนก่อน

      @@nikoo28please check it out
      class Solution {
      public int longestConsecutive(int[] nums) {
      int n = nums.length;
      int left=1;
      int right =1;
      int ans=nums[0];
      for(int i=0;i

  • @user-mk7qi6gc2m
    @user-mk7qi6gc2m 2 หลายเดือนก่อน +1

    You wont pass 1 test case, for that use double instead of int

    • @nikoo28
      @nikoo28  หลายเดือนก่อน +1

      i fixed the code in link

  • @bharadwajrss8376
    @bharadwajrss8376 8 หลายเดือนก่อน

    Hey... can we solve similar kind of question , finding maximum sum of subarray in given array. It usually solved using kadane's algorithm, but can we use this approach?
    Any way superb explanation ....

    • @nikoo28
      @nikoo28  7 หลายเดือนก่อน

      give me a link to the question.

  • @kishanmishra7301
    @kishanmishra7301 ปีที่แล้ว +2

    Hello, Your videos are so good and the way you explain the question as well as the the solution is very nice please keep making these videos I have one request can you please explain (3. Longest Substring Without Repeating Characters) this question of leetcode

    • @nikoo28
      @nikoo28  ปีที่แล้ว

      i added this problem to my list... :)

  • @sagarpanwar5722
    @sagarpanwar5722 15 วันที่ผ่านมา

    best

  • @telugustatuscreator8327
    @telugustatuscreator8327 6 หลายเดือนก่อน

    How are you getting ideas like this?

    • @nikoo28
      @nikoo28  5 หลายเดือนก่อน

      practice, practice, practice and a lot of practice my friend :)

  • @alisheheryar1770
    @alisheheryar1770 3 หลายเดือนก่อน

    Adios nikhil

  • @robertnant1264
    @robertnant1264 5 หลายเดือนก่อน

    Hi! First of all thank you for the video. I'm having a hard time understanding why we have to calculate the product going from the left and also going from the right side of the array. Why is it that a traversal from start of array to its end does not work?
    Thank you in advance

    • @nikoo28
      @nikoo28  5 หลายเดือนก่อน

      did you follow the explanation of the solution, or just looking at the code?

  • @n1724k
    @n1724k 16 วันที่ผ่านมา

    omg

  • @shivdeepbisurkar6526
    @shivdeepbisurkar6526 11 หลายเดือนก่อน +1

    Hi, awesome explanation but it's failing for test case
    nums =[0, 10, 10, 10, 10, 10, 10, 10, 10, 10, -10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0]
    output=1981284352 using above logic.
    Expected =1000000000 (as per leetcode)

    • @nikoo28
      @nikoo28  10 หลายเดือนก่อน +1

      my code passed on leetcode, did you check the one in the video description on github?

    • @user-ph5ek8tg5l
      @user-ph5ek8tg5l 2 หลายเดือนก่อน

      @@nikoo28 Your code is also failing on LeetCode. This test case seems to be added recently. Due to overflow the answer is coming wrong. Even though leetcode has said the final answer is within the int range but the intermediate values in calculation are overflowing even the long range.

    • @nishantparaskar2048
      @nishantparaskar2048 2 หลายเดือนก่อน

      @@user-ph5ek8tg5l Did you resolve with any approch

  • @user-dg4vv5ru5h
    @user-dg4vv5ru5h 9 หลายเดือนก่อน

    What if all elements are zero. Then it will fail?

    • @nikoo28
      @nikoo28  8 หลายเดือนก่อน

      It won’t fail. The answer will be 0

  • @user-dg4vv5ru5h
    @user-dg4vv5ru5h 9 หลายเดือนก่อน

    What if all elements are zero. Then it will fail?

    • @_shezzy
      @_shezzy 3 หลายเดือนก่อน

      It will not fail