Count Subarray sum Equals K | Brute - Better -Optimal

Problem Link: bit.ly/3Kn10eZ
Please watch this video before watching this one: • Longest Subarray with ...
Notes/C++/Java/Python codes: takeuforward.org/arrays/count...
We have solved the problem, and we have gone from brute force and ended with the most optimal solution. Every approach's code has been written in the video itself. Also, we have covered the algorithm with intuition.
Full Course: bit.ly/tufA2ZYt
You can follow me across social media, all my handles are below:
Linkedin/Instagram/Telegram: linktr.ee/takeUforward
00:00 Intro
01:03 Problem Statement
01:13 Sub-array definition
01:52 Example
03:13 Brute force solution
06:07 Complexity
06:29 Better solution
08:07 Complexity
08:21 Optimal Solution
08:41 Prefix sum concept
09:35 Thought process
13:55 Dry run
21:22 Code
22:38 Complexity

Пікірлер: 229

  • @itzmartin20
    @itzmartin2010 ай бұрын

    When I first started DSA, I was just so scared of the code and knowing very little about the logic and the intuition behind but Striver you are the one who has ever showed the completely difference - Extreme natural approach and observation and crystal clear logic. You've made the coding fun and interesting toward people like me. Hats off for your dedication! Understood!

  • @utkarshverma3314

    @utkarshverma3314

    10 ай бұрын

    i am doing his dsa sheet , the array part and almost every question has a completely different logic and approach and its becoming quite frustrating as im not able to come up with the solutions so do i just keep solving more problems or am i doing something wrong

  • @anshlyk

    @anshlyk

    10 ай бұрын

    keep going! I was in the same boat, you'll slowly be able to form logic@@utkarshverma3314

  • @akworld2739

    @akworld2739

    9 ай бұрын

    @@utkarshverma3314 same problem i am also facing

  • @VivekKumar-kx2zf

    @VivekKumar-kx2zf

    3 ай бұрын

    ashishbhattacharyya yup, it works for me.

  • @Sankalp-sd6fm

    @Sankalp-sd6fm

    3 ай бұрын

    could you please tell if i should make notes ?? how do i make them so that i dont put hours in it

  • @daayush6654
    @daayush6654 Жыл бұрын

    I saw this video at around 10 am in college, was only able to think of o(n²) solution, I took the pause at your hint of using prefix sum array, kept thinking for some time while in college lectures but was able to get the solution at around 6pm 😝, I know it took time but it felt good to actually think of the solution, please keep up the consistency

  • @andrewcenteno3462
    @andrewcenteno3462 Жыл бұрын

    This man is my hero, I struggled so much with this question to visualize it and subsequent problems like it. I've done ove 270 LC questions, but this man made it so simple

  • @AyushVerma-wu3nn
    @AyushVerma-wu3nn10 ай бұрын

    Just when I think the video is getting long enough for a simple problem, I go search the web and find not a single tutor with such a powerful explanation!

  • @abhijeetmishra3804
    @abhijeetmishra38049 ай бұрын

    understood bhaiya . You can not even imagine how much people love u and praise you and speak about your videos all the time. I am sure u get hiccups every now and then . Live long bhaiya u are our real teacher.

  • @AnuroopLSabu-mp8wm
    @AnuroopLSabu-mp8wm11 ай бұрын

    Its really amazing that you are taking your time in explaining via the dry run. It helps me a lot. Thanks :)

  • @user-fn2jg7ng7q
    @user-fn2jg7ng7q11 ай бұрын

    I saw many times but I couldn't understand...But now i finally understood and realised that ur explaination is too good...!

  • @alishashaikh3859
    @alishashaikh385911 ай бұрын

    Thank you so much. I saw many other youtuber's video but this video is the best . I was able to understand after watching this video for 2 times

  • @sujeet4410
    @sujeet44103 ай бұрын

    This explanation is so 100x better than Neetcode's. Thank you !!!

  • @Anurag-fk3op
    @Anurag-fk3op3 ай бұрын

    16:29 if we write if(sum==k) count++ We don't need to include 0 at beginning

  • @user-tm1hu4cw3v

    @user-tm1hu4cw3v

    Ай бұрын

    good one!!

  • @abhijitkumarsinha

    @abhijitkumarsinha

    Ай бұрын

    THAT IS WHAT I WAS DOING

  • @cinime
    @cinime Жыл бұрын

    Understood! Super fantastic explanation as always, thank you very very much for your effort!!

  • @davidmwangi4312
    @davidmwangi43122 ай бұрын

    Struggled to understand this solution, now understood, Keep up the great work Striver

  • @user-yb1es6mu8g
    @user-yb1es6mu8g10 ай бұрын

    Amazingly Understood, Thank you for such a in depth thought process

  • @aryansinha1818
    @aryansinha1818 Жыл бұрын

    You have given more than anyone can ask for. Thank you for all your support and such amazing videos. They are really helpful. Just a small thing can we have a dark mode setting for "take you forward" pages.

  • @takeUforward

    @takeUforward

    Жыл бұрын

    You can build one chrome extension may be ;)

  • @dom47

    @dom47

    Жыл бұрын

    appreciates striver by telling "u have given more than anyone can ask" and proceeds to place demand .

  • @yashjoon3889

    @yashjoon3889

    Жыл бұрын

    @@takeUforward lol would be a good project for the resume?

  • @manvinmusic9239

    @manvinmusic9239

    Жыл бұрын

    striver actually give the dark mode option

  • @Manishgupta200
    @Manishgupta200 Жыл бұрын

    That's really amazing 🤩Striver! code is too sort but logic is superb for the optimal. from brute (TC-> O(N^2), SC -> O(1)) to optimal (TC -> O(N) when using unordered_map, O(N * log N) when using ordered map, SC -> O(N) for using map data structure.

  • @gamerversez5372
    @gamerversez5372 Жыл бұрын

    Instead of adding 0 in the hashmap, we can just use the statement if(sum==k) ans++; That works fine. See the Below Code int subarraySum(vector& nums, int k) { int ans=0; unordered_map x; int sum=0; for(int i=0;i

  • @00RohitRoshan

    @00RohitRoshan

    11 ай бұрын

    very good .

  • @00RohitRoshan

    @00RohitRoshan

    11 ай бұрын

    ` if(x.find(sum-k)!=x.end()) ans+=x[sum-k]; ` And why this check before incrementing and. class Solution { public: int subarraySum(vector& nums, int k) { int ans=0,sum=0; unordered_map x; for(int i=0;i

  • @kushalswarup2662

    @kushalswarup2662

    10 ай бұрын

    brilliant

  • @rushabhajain3977
    @rushabhajain39778 ай бұрын

    Excellent explanation yaar! Great to see such kind of explanations that guide from brute force to optimised solution in such a detail! Thank you so much and keep making such great videos :)

  • @vishnupandey3390
    @vishnupandey339011 ай бұрын

    thanks striver you have really explained this so well god bless you you are a wonderful teacher for many 🙏🙏

  • @infernogamer52
    @infernogamer52 Жыл бұрын

    Understood Bhaiya! This was a tough one to understand for me...will soon revisit it Thank you🙏

  • @puneetnj
    @puneetnj11 ай бұрын

    So here, if in the question it is stated that it contains only positive as in codestudio then we can apply 2-pointer(Sliding window) as done in longest subarray with sum k. TC: O(N) SC: O(1) Else, if it contains both positive and negative HashMap is optimal

  • @vidhanshuborade5977
    @vidhanshuborade5977 Жыл бұрын

    Excellent explanation, understood ! ✨

  • @dayashankarlakhotia4943
    @dayashankarlakhotia4943 Жыл бұрын

    Previous explanation and current explanation is good .understood

  • @varunpalsingh3822
    @varunpalsingh3822 Жыл бұрын

    Really good explanation & kudos to efforts, understood 👍

  • @pulkitgupta669
    @pulkitgupta66910 ай бұрын

    Understood Striver ❤. You are a living legend sir. 🤩🤩

  • @AmanThakur-ve6ji
    @AmanThakur-ve6ji Жыл бұрын

    God for beginner❤hats of u bhaiya

  • @graviton001
    @graviton001Күн бұрын

    Was able to think O(N^2) approach and totally underatood optimal solution too 😊

  • @krishnavamsiyerrapatruni5385
    @krishnavamsiyerrapatruni5385 Жыл бұрын

    Understood. Thank you so much!

  • @GarimaShukla-jq8sf
    @GarimaShukla-jq8sfКүн бұрын

    Striver you are great 🙌🙌 .I just want to thank you ❤️.

  • @mehulthuletiya5638
    @mehulthuletiya5638 Жыл бұрын

    Timestamps 01:03 - Problem Statement 01:13 - Sub-array definition 01:52 - Example 03:13 - Brute force solution 06:07 - Complexity 06:29 - Better solution 08:07 - Complexity 08:21 - Optimal Solution 08:41 - Prefix sum concept 09:35 - Example 13:55 - Dry run 21:22 - Code 22:38 - Complexity

  • @schan263
    @schan2638 ай бұрын

    Thanks for the great video. I don't see how I can come up with the optimal solution during the interview without hint from the interviewer.

  • @code710
    @code710 Жыл бұрын

    Hi bhaiya it would be really helpful if you can give similar question links for practise after every question explanation!!

  • @sukhpreetsingh5200
    @sukhpreetsingh5200 Жыл бұрын

    Understood💖amazing explanation

  • @DTALKS01
    @DTALKS01Ай бұрын

    for me optimal is little hard but after see 2-3 time video , got easly understand

  • @nishantkumar1276
    @nishantkumar1276 Жыл бұрын

    Sir, May I know time complexity of the optimal approach in java

  • @reshusingh3558
    @reshusingh3558 Жыл бұрын

    understood sir ,great explanation

  • @gamengoaituyen4432
    @gamengoaituyen4432 Жыл бұрын

    tks for explanation, you are savior

  • @bpratikvinod8110
    @bpratikvinod81102 ай бұрын

    The sliding window approach actually performs better with O(n) time complexity. int subarraySum(vector& nums, int sum) { int count = 0; int currSum = 0; unordered_map sumFreq; for (int i = 0; i currSum += nums[i]; if (currSum == sum) count++; if (sumFreq.find(currSum - sum) != sumFreq.end()) count += sumFreq[currSum - sum]; sumFreq[currSum]++; // If currSum becomes greater than sum, // subtract elements from the start while (currSum > sum) { currSum -= nums[i - count + 1]; sumFreq[currSum]--; if (sumFreq[currSum] == 0) sumFreq.erase(currSum); count--; } } return count; }

  • @VnALShorts
    @VnALShorts Жыл бұрын

    22:54 *please explain what lines* int remove = presum - k; count += mp[remove]; mp[presum]++; do ?

  • @RaviKumar-sn6tu
    @RaviKumar-sn6tu3 ай бұрын

    understood captain...thanks

  • @Rishabh3164
    @Rishabh31648 ай бұрын

    Can we do this first calculate the prefix sum and than suffix sum and than we subtract each and sum the prefix and suffix

  • @ayanangshudasmajumder112
    @ayanangshudasmajumder112 Жыл бұрын

    if instead of specifying map[0]=1 in the beginning if we give a condition that if(preSum == k) { count ++;} Will it be correct Striver bhaiya??

  • @AniketKumar-hf2bo
    @AniketKumar-hf2bo5 ай бұрын

    understood ,thnx for amazing video ❤❤❤❤❤❤

  • @NazeerBashaShaik
    @NazeerBashaShaik3 ай бұрын

    Understood, thank you.

  • @sauravchandra10
    @sauravchandra10 Жыл бұрын

    Understood, thanks!

  • @ashj1165
    @ashj11656 ай бұрын

    though I am still figuring out on the map[0]=1 part but surely the rest of the part was indeed clear. thanks for these videos.

  • @JUST_C0DE

    @JUST_C0DE

    5 ай бұрын

    if you select no element in sub array then , map[0]=1

  • @kunwar-nw5dd
    @kunwar-nw5dd Жыл бұрын

    solution blew my mind

  • @NitinKumar-wm2dg
    @NitinKumar-wm2dg Жыл бұрын

    Thanks bhaiya, understood

  • @prigo333
    @prigo3334 ай бұрын

    you are awesome bhaiya...

  • @saddubhaiii
    @saddubhaiiiАй бұрын

    Thank you Striver. I owe you❤

  • @nopecharon
    @nopecharon11 ай бұрын

    you are topG of DSA

  • @OnstreamGaming
    @OnstreamGamingАй бұрын

    Thanks for the help raj bhaiya

  • @AnkitKumar-sz3by
    @AnkitKumar-sz3by10 ай бұрын

    thanks really good explination

  • @RohitRaj-hl6ji
    @RohitRaj-hl6ji Жыл бұрын

    Why updating the map?? Can someone explain?

  • @lakshmiprasanna7058
    @lakshmiprasanna7058 Жыл бұрын

    Understood 💯💯💯

  • @nikiteshnandale8264
    @nikiteshnandale8264 Жыл бұрын

    It seems like you have edited your voice in the video and made it soft, I am missing that bold voice which is there in the DP playlist. Please don't edit your voice, you don't have to adjust yourself for us. We like the way you are, the original STRIVER🔥🔥

  • @takeUforward

    @takeUforward

    Жыл бұрын

    But we need to look at the future, we want to go global, so audio quality has to be maintained, I hope you get that :)

  • @abdulrehmaan153

    @abdulrehmaan153

    Жыл бұрын

    ​@@takeUforwardand we love you for that too, It's sort of unconditional 😂

  • @parshchoradia9909
    @parshchoradia9909 Жыл бұрын

    Understood Sir!

  • @konankikeerthi
    @konankikeerthiАй бұрын

    Thanks bro. Understood

  • @rajatpatra2593
    @rajatpatra2593 Жыл бұрын

    Understood ❤️

  • @swapnilingale4164
    @swapnilingale416410 ай бұрын

    Nice explation ❤

  • @AdityaDhage-1603
    @AdityaDhage-1603Ай бұрын

    Why initialize map with 1,0 in the beginning?

  • @piyushnandardhane1432
    @piyushnandardhane1432 Жыл бұрын

    Please also make video for count pairs with given sum and divisible by k

  • @Hustler0109
    @Hustler0109 Жыл бұрын

    Striver you can make these playlists a bit fun if you allow your viewers to suggest you problems they think discussable !! btw loving the playlist

  • @abdulrehmaan153

    @abdulrehmaan153

    Жыл бұрын

    Plz don't ruin it for us 😂😂😂

  • @dogwoofwoof8154

    @dogwoofwoof8154

    11 ай бұрын

    plz no

  • @rohan8758
    @rohan87582 ай бұрын

    Awesome explanation, one approach of sliding window will not work in this problem if array contains negative elements also.

  • @rowgha2710
    @rowgha271010 ай бұрын

    What if the array contains 0s?

  • @AbhishekKumar-cd4gg
    @AbhishekKumar-cd4gg8 ай бұрын

    understood , but took tom much time to understood how to update the frequency if there exist a prefix sum in the HashMap

  • @meghnakhaitan2495
    @meghnakhaitan2495 Жыл бұрын

    Can you pls pls plsssss do strings before binary search next plsss🙏 ? From 2023 batch🥺. Wish we could have the entire series in our 1st 2nd 3rd yrs

  • @rahulmg05
    @rahulmg059 ай бұрын

    why can't the map be incremented before computing the count ???

  • @user-ym1nv1pw8i
    @user-ym1nv1pw8iАй бұрын

    Understood!

  • @YourCodeVerse
    @YourCodeVerse9 ай бұрын

    Understood✅🔥🔥

  • @mozsty
    @mozsty2 ай бұрын

    very nice. .thankyou

  • @deepanshuverma6237
    @deepanshuverma6237Ай бұрын

    Regarding putting (0,1) int the Hashmap initally : Let consider somehow the preSum got exactly equal to our k, means now the sub-array till that presum element gives us the k (~ preSum-k = 0). means whenever we find our preSum touching the k value, we need to increment count but we will not be able to find it in hashMap as it is yet to be inserted that why either increment count based on if preSum-k = 0 or put a (0,1) in hashmap to automatically finding preSum-k = 0 in the hashMap. int preSum = 0, count = 0, start = 0; Map mp = new HashMap(); for(int i=0;i

  • @sarangkumarsingh7901
    @sarangkumarsingh79014 ай бұрын

    Awesome Awesome Sir...............

  • @kingbadshah452
    @kingbadshah4526 ай бұрын

    understood striver thanks

  • @user-is6ky7pp2n
    @user-is6ky7pp2nАй бұрын

    Understood !! 😍😍

  • @rakshanaravindran9809
    @rakshanaravindran980910 ай бұрын

    Thank you!!

  • @user-sp8ne7hj3n
    @user-sp8ne7hj3n8 ай бұрын

    nice ..........explanation

  • @user-du1uj3wk7g
    @user-du1uj3wk7g22 күн бұрын

    i still don't get the significance of (0,1) in the map, my answer still got submitted in Leetcode.

  • @mriduljain1981
    @mriduljain198111 ай бұрын

    we can also use sliding window 2 pointer approach for this one code-> int findAllSubarraysWithGivenSum(vector & arr, int k) { int n =arr.size(),sum = 0,cnt = 0,left = 0; for(int right = 0;right k) sum-=arr[left++]; if(sum == k) cnt++; } return cnt; }

  • @amitranjan6998

    @amitranjan6998

    10 ай бұрын

    It will fail .arr[]=[1] k=0

  • @mriduljain1981

    @mriduljain1981

    10 ай бұрын

    @@amitranjan6998 yes we just need to add a condition of left

  • @samyakagarwal1777
    @samyakagarwal17773 ай бұрын

    thank you so much

  • @VineetKumar-fk2rl
    @VineetKumar-fk2rl8 ай бұрын

    We can also solve this problem in O(1) space complexity but the T.C will be 2N using two pointer approach.

  • @biswadevsarkar2830
    @biswadevsarkar2830Ай бұрын

    mpp[0] = 1 helps us to take the count when (sum == k ). Because when sum will be k, then remove will be 0. And then mpp[1] will give us 0, which will be added to the count. If we don't store 0 to our map. then we need to handle the case in an extra if condtion. which is if(sum == k) count++;

  • @her_soulmate
    @her_soulmate10 ай бұрын

    Understood 🎉

  • @opgaming-sl8ze
    @opgaming-sl8ze Жыл бұрын

    Bhaiya ye Question ka video dekhne se phale hoo gaya 😁😁Only Minor change int findAllSubarraysWithGivenSum(vector & nums, int k) { int right = 0; int left = 0; int count = 0; long long sum = nums[0]; int n = nums.size(); while(right while(left k){ sum = sum - nums[left]; left++; } if(sum == k){ count++; } right++; if(right sum+=nums[right]; } } return count; }

  • @shobhitsrivastava1223
    @shobhitsrivastava122311 ай бұрын

    Understood ❤

  • @impalash_ag
    @impalash_ag25 күн бұрын

    Storing (0,1) in the hashmap is bit confusing, instead we can just increase a check i.e. if(currSum == k) count++. The more readable code(JAVA) will look like this: public int subarraySum(int[] nums, int k) { int currSum = 0, count = 0; int n = nums.length; HashMap map = new HashMap(); for(int i=0; i

  • @YerramArun
    @YerramArun Жыл бұрын

    Understood❤❤

  • @garvitbharti5301
    @garvitbharti530118 күн бұрын

    Why cant we use sliding window approach here

  • @shubhambhardwaj8982
    @shubhambhardwaj8982 Жыл бұрын

    Hey Strivers Good explanation ❤ Can you just change the gfg link of this question it redirect to same page. Once again thank you 👍

  • @aashapun6533
    @aashapun65337 ай бұрын

    The Best♥

  • @gagan_.hegde14
    @gagan_.hegde142 ай бұрын

    underrstood

  • @sahilnayak9000
    @sahilnayak90006 ай бұрын

    ❓ You mentioned performing a dry run on the array [3, -3, 1, 1, 1] to understand the significance of initially putting (0, 1) in the map. However, it hasn't been specified which sum we should consider for this particular dry run.

  • @sahilnayak9000

    @sahilnayak9000

    6 ай бұрын

    Although i understood, if we didn't want to put initially that or if we find it challenging to understand its significance. there is an alternative approach to handle the situation. Another way is when currentSum - given_sum == 0 we just need to increment counter. that's it we can omit to put initially (0,1) pair in map.

  • @user-nk1mb5fy7j
    @user-nk1mb5fy7j Жыл бұрын

    UNDERSTOOD

  • @chinmay6152
    @chinmay6152 Жыл бұрын

    Understood😁😉

  • @anuragroy9045
    @anuragroy904511 ай бұрын

    understood!!!

  • @saileshsirari2014
    @saileshsirari20142 ай бұрын

    Without adding to map, you need to count occurrences still not in map public int subarraySum(int[] nums, int k) { int sum=0; int count =0; Map map = new HashMap(); for(int i=0;i

  • @user-quietwicked
    @user-quietwicked9 ай бұрын

    Understood

  • @satyam5613
    @satyam56133 ай бұрын

    thank you

  • @Hariharan0606
    @Hariharan0606 Жыл бұрын

    Amazing

  • @user-uv5or5bm2c
    @user-uv5or5bm2c5 ай бұрын

    Understood.

  • @PranaliAwhale
    @PranaliAwhaleАй бұрын

    understood