907. Sum of Subarray Minimums | Monotonic Stack | Brute - Better - Optimal

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • In this video, I'll talk about how to solve Leetcode 907. Sum of Subarray Minimums | Monotonic Stack
    Problem Link: leetcode.com/problems/sum-of-...
    Checkout DSA-169 Series: • Aryan DSA-169 Series |...
    100Days 100k Placements: • 100 Days 100K Placement
    Let's Connect:
    📝Linkedin: / aryan-mittal-0077
    📸 Instagram: / ez.pz.dsa
    📱Telegram : t.me/aryan_mittal_group
    🤖 Github: github.com/aryan-0077
    About Me:
    I am Aryan Mittal - A Software Engineer in Goldman Sachs, Speaker, Creator & Educator. During my free time, I create programming education content on this channel & also how to use that to grow :)
    ✨ Timelines✨
    0:00 - Problem Explanation
    0:57 - Brute Force
    1:55 - Better
    3:52 - Optimal - Using Monotonic Stack
    17:36 - Dry Run
    27:10 - Code Explanation
    ✨ Hashtags ✨
    #programming #Interviews #leetcode #faang #maang #datastructures #algorithms

Komentáře • 38

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

    Don't know what LC smoked, before placing this Problem as Medium 🫠🫠

  • @gdivya1895
    @gdivya1895 Před 6 měsíci +29

    This question ate my brain for the past two hours, I've tried all other videos available for this question, including big names like neetcode, but your solution is the only one that I could understand from start to finish. Well done sir. Earned a subscribe.

  • @dhushyanthankannan8856

    This is the greatest explanation among all the explanations available in yt

  • @madhubala5655
    @madhubala5655 Před 2 měsíci +4

    Finally after watching the solution in 4 different channels I understood it here

  • @jjjyotijain
    @jjjyotijain Před 4 měsíci +3

    bro, what an amazing explanation.
    now I don't have any doubt left after watching this video.
    and now I can easily solve the problems of same pattern.
    Thank you very much for such a great explanation😍👏👏.

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

    Thank you so much for explaining HOW the count works. I was trying to recall what I learned in my combinatorics class years ago lol

  • @sagarsaini5377
    @sagarsaini5377 Před 23 dny

    finally a good explaination.

  • @ohhpeejoshi9110
    @ohhpeejoshi9110 Před 27 dny +1

    thankyou so much buddy! very nice

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

    loved your way of explanation❤

  • @k.satish3663
    @k.satish3663 Před 6 měsíci +2

    totally understood ! thank you so much bro

  • @lohithaadapala6989
    @lohithaadapala6989 Před 23 dny

    Excellent!

  • @tejaschalke1778
    @tejaschalke1778 Před 6 měsíci +12

    I was pissed I couldn't solve this problem but, now I feel a little better considering how hard this was. Also please make a video on KMP 😮‍💨, waiting from the previous weekly contest.

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

      That video is out bro, that day only it came - Write on yt - Kmp by Aryan Mittal, you will get the video ❤️❤️🫂

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

      @@ARYANMITTAL damn i completely missed it 😅.

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

    thank you this is the best explanation I found :)

  • @homeroserna9983
    @homeroserna9983 Před 4 měsíci

    Great solution. I like how you worked out the problem step by step completely before going to the code. You made a hard problem seem easy.

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

    How aryan can maintain work n leetcode parallely

  • @k.k.harjeeth5422
    @k.k.harjeeth5422 Před 21 dnem

    24:06 this was brilliant !

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

    Brilliant explanation♥

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

    I cant get a hold on why left*right works i get that it tells us that how many subarrays will include that particular number, but cant understand why it works?? anyone explain if possible, Great video by the way....Clear and precise.

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

    Actually I'm not good at hard problems but after reading the problem I don't know how it clicked my mind and cracked the monotonic stack solution.

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

    Bro can u solve Sum of Subarray Ranges as well.
    Thanks in advance !

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

    superb explanation, really like it (tired of python explanation :D)

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

    thanksssss

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

    class Solution {
    private:
    vector prevSmaller(vector&arr){
    int n=arr.size();
    vectorans(n);
    stackst;
    for(int i=0;ielm){
    st.pop();
    }

    //empty
    if(st.empty()){
    ans[i]=-1;
    }
    else{
    ans[i]=st.top();
    }
    st.push(i);
    }

    //push
    return ans;
    }
    vector nextSmaller(vector&arr){
    int n=arr.size();
    vectorans(n);
    stackst;
    for(int i=n-1;i>=0;i--){
    int elm=arr[i];
    //pop
    while(!st.empty() && arr[st.top()]>=elm){
    st.pop();
    }

    //empty
    if(st.empty()){
    ans[i]=-1;
    }
    else{
    ans[i]=st.top();
    }

    //push
    st.push(i);
    }
    return ans;
    }
    public:
    int sumSubarrayMins(vector& arr) {
    int n=arr.size();
    int MOD = 1000000007;

    vectornext=nextSmaller(arr);
    vectorprev=prevSmaller(arr);;

    long long sum=0;
    for(int i=0;i

  • @user-gn5th9vv4k
    @user-gn5th9vv4k Před 3 měsíci

    Bhai aapne cnt ko tho badhaya hi nahi jab voh while loop main nahi ghus raha hai tab???

  • @mdsajidanwar6416
    @mdsajidanwar6416 Před 6 měsíci +4

    Given constraint is 3x10^4 , then O(n^2) should work then why it's TLE showing

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

    Showing TLE

  • @AkashDeep-jp1ts
    @AkashDeep-jp1ts Před 2 měsíci

    Fucked up my mind!

  • @user-om7vk9gk5k
    @user-om7vk9gk5k Před 5 měsíci +2

    #include
    #include
    #include
    using namespace std;
    class Solution {
    public:
    int sumSubarrayMins(vector& arr) {
    stack st;
    vector next_lesser(arr.size(), arr.size());
    vector prev_lesser(arr.size(), -1);
    for (int i = 0; i < arr.size(); i++) {
    while (!st.empty() && arr[st.top()] >= arr[i]) {
    next_lesser[st.top()] = i;
    st.pop();
    }
    prev_lesser[i] = st.empty() ? -1 : st.top();
    st.push(i);
    }
    long long answer = 0;
    double mod = 1e9 + 7;
    for (int i = 0; i < arr.size(); i++) {
    long long left = i - prev_lesser[i];
    long long right = next_lesser[i] - i;
    answer += arr[i] * left * right;
    answer %= (long long)mod;
    }
    return (int)answer;
    }
    };
    int main() {
    Solution sol;
    vector arr = {3, 1, 2, 4};
    cout

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

    stack st;
    st.push(-1);
    int n=arr.size();
    vector dp(n);
    long long ans=0;
    for(int i=0;iarr[i-1])
    dp[i]=(arr[i]+dp[i-1]);
    else
    {
    // 2nd case
    while(st.top()!=-1 and arr[i]

  • @abc-ym4zs
    @abc-ym4zs Před 6 měsíci

    bhaiya to improve logical thinking should i need to do cp bhaiya i am in third year i am not getting interest any tips bhaiya

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

    Correct me if I'm wrong, but I believe the code fails for brute and better. Because it is not taking into account single element subarrays. Thank you for the stack solution tho, I was stuck on it the whole day lol

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

    did it by myself in half hour

  • @veekykumar4211
    @veekykumar4211 Před 4 měsíci

    Why Wrong Answer
    Runtime: 7 ms
    Case 1
    Case 2
    Input
    arr =
    [11,81,94,43,3]
    Output
    384
    Expected
    444
    class Solution {
    public:
    int sumSubarrayMins(vector& arr) {
    int MOD = 1e9 + 7;
    int n = arr.size();
    vector left(n,0), right(n,0);
    stacksLeft, sRight;

    for(int i=0;iarr[i]){
    cnt+=sLeft.top().second;
    sLeft.pop();
    }
    sLeft.push({arr[i],cnt});
    left[i]=cnt;
    }
    for(int i=n-1;i>=0;i--){
    int cnt=1;
    if(!sRight.empty() && sRight.top().first>=arr[i]){
    cnt+=sRight.top().second;
    sRight.pop();
    }
    sRight.push({arr[i],cnt});
    right[i]=cnt;
    }
    long long sum = 0;
    for(int i=0;i