Sum of Subarray Minimums - Leetcode 907 - Python

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • 🚀 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/sum-of-...
    0:00 - Read the problem
    0:11 - Drawing Explanation
    11:17 - Coding Explanation
    leetcode 907
    #neetcode #leetcode #python

Komentáře • 79

  • @ayushman_sr
    @ayushman_sr Před 4 měsíci +47

    Raise hand if you still didn't understood it by now 🤚

  • @theruler1096
    @theruler1096 Před 6 měsíci +108

    If you face interview question like this, you're not unlucky. You're just dead.

    • @tryundel
      @tryundel Před 6 měsíci

      Sorry a noob here... how bad is it to solve it with O(n^2) on an interview?

    • @anti-tankartur677
      @anti-tankartur677 Před 6 měsíci +6

      ​@@tryundel you're basically showing that you have a grasp on the basics but you're not good enough to optimize solutions. For prestigious companies, I think it's generally perceived as red flag.

    • @ducthinh2412
      @ducthinh2412 Před 6 měsíci

      @@tryundel The obvious brute force approach is n^2 so you will need to come up with a O(n) solution. The interview is at least 45 mins and if it's just 1 question, after you provide the brute foce, you will be expected to come up with the optimal solution

    • @haoyu1247
      @haoyu1247 Před 6 měsíci

      you will not be moving forward to next step, even it is an internship position (my experience with one of the FAANG)@@tryundel

    • @chisomedoka401
      @chisomedoka401 Před 6 měsíci

      what we call "your village people" over here

  • @davi_singh
    @davi_singh Před 6 měsíci +54

    Everytime I think I have a handle on leetcode, I get a question like this one and I wonder why the heck am I so dump. Thanks @NeetCodeIO you have the best explanations

    • @abrahamlincoln5724
      @abrahamlincoln5724 Před 6 měsíci +1

      Same reason why I hesitate to apply to jobs in big tech where LC questions are common. How do you solve a question if you never encountered similar question(or pattern) before?

    • @davi_singh
      @davi_singh Před 6 měsíci

      @@abrahamlincoln5724 same boat brother, I am shit scared cause of the same thing. Have been grinding LC for 3 months gone through 4 study plans but don't feel ready at all

    • @soumyajitganguly2593
      @soumyajitganguly2593 Před 2 měsíci

      @@abrahamlincoln5724 you practice enough problems so that its unlikely to be a new pattern

  • @ryo_dm
    @ryo_dm Před 6 měsíci +18

    If an interviewer decides to ask you this question, you are already rejected

  • @reckyru
    @reckyru Před 6 měsíci +21

    Disgustingly hard problem IMO

  • @elyababakova2125
    @elyababakova2125 Před 6 měsíci +17

    crazy question

  • @hengyulee4319
    @hengyulee4319 Před 6 měsíci +8

    For the modified code, because when calculating left and right we are computing the distance of two elements and appending/prepending does not affect the distance. Two -inf solve some edge cases and empty the stack (except for the first -inf) in the last iteration of the for loop. Correct me if I am wrong.

  • @coolgamertm4411
    @coolgamertm4411 Před 6 měsíci +7

    Secret POV : Leetcode daily hard problem help this channel grow more

  • @iliadmitriev01
    @iliadmitriev01 Před 6 měsíci +3

    you could also add -inf only to the back off the arr,
    this absolute minimum will purge the stack without involving extra code at the end of the algorithm

  • @m.varunreddy7365
    @m.varunreddy7365 Před 6 měsíci +8

    couldnt understand, this q is definitely not medium

  • @codingoak4701
    @codingoak4701 Před 6 měsíci +1

    The reason that optimization works is, for all the small values that dont get removed from the stack, the result will be dynamically updated for the distance to the ends of the array.

  • @chien-yuyeh9386
    @chien-yuyeh9386 Před 6 měsíci +1

    Thanks for the amazing video

  • @XEQUTE
    @XEQUTE Před 6 měsíci +1

    wohoo , you did it!!
    ( hello from yesterday)

  • @alxolr
    @alxolr Před 6 měsíci +5

    Gosh if you get one of this during an interview you are done.

  • @pdjeowudjx
    @pdjeowudjx Před 6 měsíci

    i was waiting thx

  • @coffeebytes3257
    @coffeebytes3257 Před 6 měsíci +5

    💀 why cant my brain figure this stuff out without help 😭

    • @lingyundai964
      @lingyundai964 Před 6 měsíci

      more practice more practice we got this

  • @akialter
    @akialter Před 6 měsíci +3

    I just solved this and the video uploaded 😅. Still watching tho, I like your explanation

  • @sk_4142
    @sk_4142 Před 6 měsíci +1

    A humbling problem indeed

  • @jianhuahe4066
    @jianhuahe4066 Před 5 měsíci

    I am wondering for n elements the total combination would be n square. Should it be multiple 2 n times and minus 1? Taking an example: n = 2, there are 3 combo, n =3: there are 7.

  • @chiragsrivastava4217
    @chiragsrivastava4217 Před 6 měsíci +1

    class Solution:
    def sumSubarrayMins(self, arr: List[int]) -> int:
    MOD=10**9+7
    stack=[-1]
    res=0
    arr.append(0)
    for i,val in enumerate(arr):
    while stack and val

  • @arunrajput1007
    @arunrajput1007 Před 5 měsíci +1

    hey @NeetcodeIO i am not sure for any new medium level problem i would be able to come up with a solution in 25 mins and this includes explanation + logic + coding + edgecases + dry run. This is not possible if one has already solved this question before.
    Just need your thoughts whether this is possible for everyone.

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

    for the second for loop, when you iterate over a stack. are you iterating it like an array? it seems that you assume you can iterate from the earliest added element all the way to the last added element, which is a queue not a stack. in stack you can only iterate over it via the last added element no?

  • @SickleM
    @SickleM Před 6 měsíci +1

    Can't believe I did this in first try!

  • @user-vu4ng4rb8k
    @user-vu4ng4rb8k Před 6 měsíci

    could you also upload videos for leetcode biweekly contests

  • @KhyatiSatija
    @KhyatiSatija Před 6 měsíci

    Hello i have been following you since really long , I usually understand what you teach, but this video was a bit complex for me. But I have done this question.
    Here's my Python code.
    Its the same approach as yours, just more simple and brute forced.
    class Solution:
    def sumSubarrayMins(self, arr: List[int]) -> int:
    arr = [float('-inf')] + arr + [float('-inf')]
    previousSmaller = {}
    preStack = []
    nextStack = []
    nextSmaller = {} #hashmap
    result = 0
    MOD = 10 ** 9 + 7
    for i in range(len(arr) - 1, -1, -1):
    while preStack and preStack[-1][1] > arr[i]:
    j, m = preStack.pop()
    previousSmaller[j] = i #prev smaller element
    preStack.append((i, arr[i]))

    for i in range(len(arr)):
    while nextStack and nextStack[-1][1] >= arr[i]:
    j, m = nextStack.pop()
    nextSmaller[j] = i
    nextStack.append((i, arr[i]))
    for i in range(1,len(arr) - 1):
    minTimes = (i - previousSmaller[i]) * (nextSmaller[i] - i) #number of subarrays for which the element at index i is the minimum
    result += arr[i] * minTimes
    result = result % MOD
    return result
    # arr - 0 3 4 5 6 1 4 6 7 0
    # index - 0 1 2 3 4 5 6 7 8 9
    #for handling duplicates,we do >= while calculating for nextSmaller and > in prevSmaller
    #vice versa will also work

  • @sankalppatil2994
    @sankalppatil2994 Před 6 měsíci +3

    Rip I still dont get it

  • @upendrakumar-bw1jd
    @upendrakumar-bw1jd Před 2 měsíci

    Actually i am big fan of neetcode because he is the only one who gives better intitution but this time really want to say this time neetcode fail to explains this problem

  • @soumithjavvaji3310
    @soumithjavvaji3310 Před 24 dny

    Either getting rejected or giving a O(n^2) solution is predefined , if the interviewer asks this!

  • @dingus2332
    @dingus2332 Před 6 měsíci

    Could this be solved with Segment Tree ?

  • @sbera87
    @sbera87 Před 6 měsíci

    Stack grows upward, but I get the point

  • @user-pq8mz5eb5w
    @user-pq8mz5eb5w Před 6 měsíci +6

    there are n(n+1)/2 sub arrays not n²

    • @kartikhegde533
      @kartikhegde533 Před 6 měsíci +1

      he probably mentioned about overall complexity. which is still n^2

  • @HeroHunter07
    @HeroHunter07 Před 6 měsíci +7

    Hard one

  • @shellingford5534
    @shellingford5534 Před 6 měsíci +1

    I still don't understand why we are doing j + 1 in the else portion. Can someone please explain this to me like I am 5...

    • @anti-tankartur677
      @anti-tankartur677 Před 6 měsíci +2

      Basically, else is only done when the stack is empty. If the stack is empty after popping the last element, that means it is the smallest number in that array upto THAT index, which means that it is going yo be present in every subarray and will also be the minimum of all these subarrays. For example, suppose the stack is empty and the element popped is 1 at the index of 2. At index 0 and 1, you have 3 and 2. So for all the subarrays from the index 0 to 2, 1 is going to be the minimum nunber and hence j+1 (2+1 =3 ) as 3 subarrays will have the minimum as 1. Hope this helps.

    • @ducthinh2412
      @ducthinh2412 Před 6 měsíci

      Let's say we have:
      nums = [2, 3, 5, 1]
      index = [0, 1, 2, 3]
      Let's say we are currently at index 3 (value = 1). Our stack (index, value) is:
      stack = [(0,2), (1,3), (2,5)]
      Since 1 is less than all of the values in the stack, we pop everything from the stack. When we get to (0,2), the top of the stack, the right count is 3. For the left count, since the stack is now empty, there is only a single value from the beginning of the array till this point, which is 2. Its index is 0, hence we need to add 1 to the index to get the count of subarrays from the beginning up to and including 2

    • @AdenGolden
      @AdenGolden Před 6 měsíci

      + 1 is include the jth element itself if the stack is empty is 0 + 1(itself) = 1

    • @JosephMuturi-j4d
      @JosephMuturi-j4d Před měsícem

      @@anti-tankartur677 This is an amazing explanation,,,,,only few can understand how figuring that out almost solves the problem,,,even neetcode couldn't explain that one,,,,it's genius

  • @s016_aviratshambharkar2
    @s016_aviratshambharkar2 Před 6 měsíci +2

    Subarrays should be n (n + 1) / 2 right ??

  • @rajchinagundi7498
    @rajchinagundi7498 Před 6 měsíci

    class Solution:
    def sumSubarrayMins(self, arr: List[int]) -> int:
    mod=10**9+7
    n=len(arr)
    @lru_cache(maxsize=None)
    def solve(i, n, mn):
    if i == n:
    return 0
    curr = arr[i]
    if curr < mn:
    mn = curr
    return (mn + solve(i + 1, n, mn)) % mod
    sumTotal = 0
    for i in range(len(arr)):
    sumTotal = (sumTotal + solve(i, len(arr), inf)) % mod
    return sumTotal. Hi Neetcode I wrote this recursive approach and it passes 82/87 test cases, and then fails with memory limit exceeded error, I was wondering it this question is only possible via iterative approach?

    • @CrabGuyy
      @CrabGuyy Před 6 měsíci

      every iterative code can be done recursively, i would suggest trying to implement tail recursion because python optimizes it for memory

    • @rajchinagundi7498
      @rajchinagundi7498 Před 6 měsíci

      Doesnt make a differnce if recursive stack overflows@@CrabGuyy

  • @randomisedstrength5050
    @randomisedstrength5050 Před 6 měsíci

    I didn't understand anything related to the use of stack in the code 😶‍🌫

  • @haoli8983
    @haoli8983 Před 26 dny

    this question is so hard == why just medium ?

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

    It's too complexity for me, though I have solved 243 questions.

  • @Moch117
    @Moch117 Před 6 měsíci

    This question made me question Leetcode smh
    Did you solve it on your own

  • @aaditya_87
    @aaditya_87 Před 2 měsíci

    hey man , its time for u to answer here why u did that

  • @vinsin4619
    @vinsin4619 Před 6 měsíci

    can you explain the last code

    • @vinsin4619
      @vinsin4619 Před 6 měsíci +1

      the negative inf added to front and back of the array

    • @harryliu799
      @harryliu799 Před 6 měsíci

      The neg inf at the back ensures that the elements in the monotonic increasing stack are processed, as everything inside is smaller than neg inf (same as the original loop over the stack).@@vinsin4619

  • @jamjam3448
    @jamjam3448 Před měsícem

    but total number of subarrays is n*(n+1)/2 instead of n^2.

    • @harshitsharma2639
      @harshitsharma2639 Před měsícem

      thats order n^2 tho

    • @jamjam3448
      @jamjam3448 Před měsícem

      @@harshitsharma2639 You're talking of complexity, not the number of subarrays. They are different

    • @harshitsharma2639
      @harshitsharma2639 Před měsícem +1

      @@jamjam3448 i know that dude. The time to traverse and build the result will still be O(n^2) thats what neet was trying to say.

    • @jamjam3448
      @jamjam3448 Před 28 dny +1

      @@harshitsharma2639 yeah i think that's what he was trying to say also but he kept saying number of times instead of the time complexity as the two are different.

  • @pastori2672
    @pastori2672 Před 6 měsíci +1

    too much intuition

  • @rishujeetrai5780
    @rishujeetrai5780 Před 11 dny

    😭👍

  • @eyesgotshowyo7800
    @eyesgotshowyo7800 Před 2 měsíci

    i understood nothing

  • @shreehari2589
    @shreehari2589 Před 6 měsíci

    Def hard not med

  • @ehm-wg8pd
    @ehm-wg8pd Před měsícem

    if you get this interview question, omaewa mou shindeiru

  • @sumitrohilla1494
    @sumitrohilla1494 Před 2 měsíci

    how can I continue watching this video, when 1 min in you are giving wrong explaination.... no. of subarrays are not n^2 its n(n+1)/2

    • @anandp7482
      @anandp7482 Před 2 měsíci

      its O(n ^ 2) . n * (n + 1) /2 is still O (n ^ 2)

    • @sumitrohilla1494
      @sumitrohilla1494 Před 2 měsíci

      Ohh, sry for the wrong explanation, I am not talking about time complexity..
      He said no. of subarrays is array are n^2..but no of subarrays are n(n+1)/2

  • @johnthompson1327
    @johnthompson1327 Před 6 měsíci +1

    first

  • @jaatharsh
    @jaatharsh Před 6 měsíci

    checking solution in Python is useless for understanding, when iterating ur iterating from top of stock to bottom or reverse.
    Python is such a sloppy choice of language for DSA

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

    still dont get it