Count Subarray sum Equals K | Brute - Better -Optimal

Поділитися
Вставка
  • Опубліковано 26 лис 2024

КОМЕНТАРІ • 274

  • @itzmartin20
    @itzmartin20 Рік тому +173

    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 Рік тому +7

      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 Рік тому

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

    • @akworld2739
      @akworld2739 Рік тому

      @@utkarshverma3314 same problem i am also facing

    • @VivekKumar-kx2zf
      @VivekKumar-kx2zf 7 місяців тому

      ashishbhattacharyya yup, it works for me.

    • @Sankalp-sd6fm
      @Sankalp-sd6fm 7 місяців тому

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

  • @AyushVerma-wu3nn
    @AyushVerma-wu3nn Рік тому +28

    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!

  • @daayush6654
    @daayush6654 Рік тому +68

    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 Рік тому +44

    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

  • @abhijeetmishra3804
    @abhijeetmishra3804 Рік тому +10

    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.

  • @NikhilKoushik4b4
    @NikhilKoushik4b4 Рік тому +10

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

  • @gamerversez5372
    @gamerversez5372 Рік тому +15

    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 Рік тому +3

      very good .

    • @00RohitRoshan
      @00RohitRoshan Рік тому +1

      ` 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 Рік тому

      brilliant

    • @the_avii_7
      @the_avii_7 2 місяці тому +2

      It will fail for the test case: [1,-1,0] k = 0.

  • @puneetnj
    @puneetnj Рік тому +20

    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

  • @mehulthuletiya5638
    @mehulthuletiya5638 Рік тому +10

    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

  • @srija0608
    @srija0608 Місяць тому +1

    @takeUforward when you explained the logic behind taking the 0 prefix-sum and the count value, my mind was actually blown! This was an amazing explanation, thank you❤

  • @AnuroopLSabu-mp8wm
    @AnuroopLSabu-mp8wm Рік тому +7

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

  • @aryansinha1818
    @aryansinha1818 Рік тому +26

    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  Рік тому +25

      You can build one chrome extension may be ;)

    • @dom47
      @dom47 Рік тому +25

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

    • @yashjoon3889
      @yashjoon3889 Рік тому +4

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

    • @manvinmusic9239
      @manvinmusic9239 Рік тому +4

      striver actually give the dark mode option

  • @Manishgupta200
    @Manishgupta200 Рік тому +6

    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.

  • @davidmwangi4312
    @davidmwangi4312 6 місяців тому +1

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

  • @sujeet4410
    @sujeet4410 7 місяців тому +4

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

  • @Someone-k4d
    @Someone-k4d 3 місяці тому

    What an excellent explanation! Even after watching another video 6-7 times, l could not understand it. But understood this perfectly after watching only once!

  • @mriduljain1981
    @mriduljain1981 Рік тому

    we can also use sliding window 2 pointer approach for this one code->
    int findAllSubarraysWithGivenSum(vector < int > & 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 Рік тому

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

    • @mriduljain1981
      @mriduljain1981 Рік тому

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

  • @alishashaikh3859
    @alishashaikh3859 Рік тому +1

    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

  • @biswadevsarkar2830
    @biswadevsarkar2830 5 місяців тому +1

    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++;

  • @pulkitgupta669
    @pulkitgupta669 Рік тому +1

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

  • @bpratikvinod8110
    @bpratikvinod8110 6 місяців тому +1

    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 < nums.size(); ++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;
    }

    • @ritu-ql8fk
      @ritu-ql8fk 17 днів тому

      But the thing is sliding window approach won't work for negative numbers

    • @bpratikvinod8110
      @bpratikvinod8110 17 днів тому

      @@ritu-ql8fk Just remove the extra while loop

  • @Dibyadipan
    @Dibyadipan 2 місяці тому

    Finally understood the prefix sum concept after u explained by doing a dry run! Thanks Striver!❤✌🏼

  • @Anurag-fk3op
    @Anurag-fk3op 7 місяців тому +15

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

  • @piyushchaudhary3195
    @piyushchaudhary3195 3 місяці тому

    More optimal solution than striver's:
    Using two pointers create your imaginary window. If the `sum == k` then increment `count` and move first pointer forward because you no longer need that element to count towards the sum. If `sum > k` then decrease the sum by moving the first pointer forward. If `sum < k` then increase the sum by using the second pointer.
    If the second pointer has gone out of range start decreasing the window size by incrementing the first pointer.
    int findAllSubarraysWithGivenSum(vector& arr, int k) {
    int count = 0;
    int i = 0;
    int j = 1;
    int sum = arr[i];
    while(i

    • @mythologyKnowledge6581
      @mythologyKnowledge6581 3 місяці тому

      It will work only for non negative numbers in array.As u are moving forward assuming that sum will not decrease,think about it

    • @piyushchaudhary3195
      @piyushchaudhary3195 3 місяці тому

      @@mythologyKnowledge6581 Yeah, you 're right. It's only optimal for positives.

  • @infernogamer52
    @infernogamer52 Рік тому +2

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

  • @nopecharon
    @nopecharon Рік тому +1

    you are topG of DSA

  • @MukeshH.P
    @MukeshH.P Рік тому +1

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

  • @rushabhajain3977
    @rushabhajain3977 Рік тому +1

    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 :)

  • @AmanThakur-ve6ji
    @AmanThakur-ve6ji Рік тому +1

    God for beginner❤hats of u bhaiya

  • @cinime
    @cinime Рік тому +1

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

  • @KrishnaChauhan-fo4ky
    @KrishnaChauhan-fo4ky 26 днів тому

    class Solution {
    public:
    int subarraySum(vector& nums, int k) {
    int psum=0,e=0,count=0;
    unordered_maphashmap;
    hashmap[0]=1;
    while(e

  • @dayashankarlakhotia4943
    @dayashankarlakhotia4943 Рік тому +1

    Previous explanation and current explanation is good .understood

  • @fluxdevyt
    @fluxdevyt Рік тому

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

  • @nikiteshnandale8264
    @nikiteshnandale8264 Рік тому +5

    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  Рік тому +15

      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 😂

    • @spartaninfo3273
      @spartaninfo3273 3 місяці тому

      Banee...

  • @neerajkumar-ts6om
    @neerajkumar-ts6om 3 місяці тому

    I think I should watch it again, have watched a lot of your video this is the first which I didn't understand in the first go.

  • @vishnupandey3390
    @vishnupandey3390 Рік тому

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

  • @vidhanshuborade5977
    @vidhanshuborade5977 Рік тому +2

    Excellent explanation, understood ! ✨

  • @graviton001
    @graviton001 4 місяці тому

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

  • @code710
    @code710 Рік тому +7

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

  • @deepanshuverma6237
    @deepanshuverma6237 5 місяців тому

    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

  • @GarimaShukla-jq8sf
    @GarimaShukla-jq8sf 4 місяці тому

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

  • @varunpalsingh3822
    @varunpalsingh3822 Рік тому +1

    Really good explanation & kudos to efforts, understood 👍

  • @ProductivityPowerhouse0109
    @ProductivityPowerhouse0109 Рік тому +5

    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

  • @krishnavamsiyerrapatruni5385
    @krishnavamsiyerrapatruni5385 Рік тому +1

    Understood. Thank you so much!

  • @ashj1165
    @ashj1165 10 місяців тому

    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 10 місяців тому

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

  • @VineetKumar-fk2rl
    @VineetKumar-fk2rl Рік тому +1

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

  • @DTALKS01
    @DTALKS01 5 місяців тому

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

  • @RaviKumar-sn6tu
    @RaviKumar-sn6tu 8 місяців тому +1

    understood captain...thanks

  • @sukhpreetsingh5200
    @sukhpreetsingh5200 Рік тому

    Understood💖amazing explanation

  • @ayanangshudasmajumder112
    @ayanangshudasmajumder112 Рік тому +4

    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??

  • @pradeepsahu5500
    @pradeepsahu5500 19 днів тому +1

    My optimized Code different from the given optimized code, with same time complexity :
    int subArraySumOptimized(vector &nums, int k)
    {
    int n = nums.size();
    int summation = 0;
    map mpp;
    int count = 0;
    for (int i = 0; i < n; i++)
    {
    summation += nums[i];
    if (summation == k)
    {
    count++;
    }
    if (mpp.find(summation - k) != mpp.end())
    {
    count += mpp[summation - k];
    }
    mpp[summation]++;
    }
    return count;
    }

  • @JohadP-v6e
    @JohadP-v6e 4 місяці тому +3

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

  • @saddubhaiii
    @saddubhaiii 5 місяців тому

    Thank you Striver. I owe you❤

  • @niketandoddamani1093
    @niketandoddamani1093 29 днів тому

    That Dry run! 🔥

  • @schan263
    @schan263 Рік тому

    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.

  • @kunwar-nw5dd
    @kunwar-nw5dd Рік тому

    solution blew my mind

  • @impalash_ag
    @impalash_ag 5 місяців тому

    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

  • @gamengoaituyen4432
    @gamengoaituyen4432 Рік тому

    tks for explanation, you are savior

  • @saileshsirari2014
    @saileshsirari2014 6 місяців тому

    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

  • @rohan8758
    @rohan8758 7 місяців тому

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

  • @prigo333
    @prigo333 8 місяців тому +1

    you are awesome bhaiya...

  • @AniketKumar-hf2bo
    @AniketKumar-hf2bo 10 місяців тому

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

  • @rajatpatra2593
    @rajatpatra2593 Рік тому +2

    Understood ❤️

  • @lakshmiprasanna7058
    @lakshmiprasanna7058 Рік тому +1

    Understood 💯💯💯

  • @sahilnayak9000
    @sahilnayak9000 10 місяців тому


    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 10 місяців тому

      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.

  • @OnstreamGaming
    @OnstreamGaming 5 місяців тому

    Thanks for the help raj bhaiya

  • @reshusingh3558
    @reshusingh3558 Рік тому

    understood sir ,great explanation

  • @meghnakhaitan2495
    @meghnakhaitan2495 Рік тому +1

    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

  • @parasarora5869
    @parasarora5869 3 дні тому

    Great one ! ❤

  • @sarangkumarsingh7901
    @sarangkumarsingh7901 8 місяців тому

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

  • @NitinKumar-wm2dg
    @NitinKumar-wm2dg Рік тому

    Thanks bhaiya, understood

  • @mriduljain6809
    @mriduljain6809 Рік тому

    Can also do like this:
    int subarraySum(vector& nums, int k) {
    unordered_map m;
    int c = 0;
    int s=0;
    for(int i=0;i

  • @tarunsatyarthi4355
    @tarunsatyarthi4355 Рік тому +1

    Easy to understand code
    #include
    int findAllSubarraysWithGivenSum(vector < int > & arr, int k) {
    // Write Your Code Here
    map mpp;
    int sum=0;
    mpp[0]=1;
    int count=0;
    for(int i=0;i

  • @AnkitKumar-sz3by
    @AnkitKumar-sz3by Рік тому

    thanks really good explination

  • @SYCOA12CHAITANYAASOLE
    @SYCOA12CHAITANYAASOLE 6 місяців тому

    Understood !! 😍😍

  • @NazeerBashaShaik
    @NazeerBashaShaik 8 місяців тому

    Understood, thank you.

  • @culeforever5408
    @culeforever5408 Рік тому +1

    undestood ✌

  • @YourCodeVerse
    @YourCodeVerse Рік тому

    Understood✅🔥🔥

  • @thebusinesspostt
    @thebusinesspostt Рік тому +15

    are we supposed to think of optimal solution on our own. asking because it seems pretty daunting.

    • @takeUforward
      @takeUforward  Рік тому +12

      Its not daunting, it is basically a technique, on the basis of this you can solve many questions

    • @RajeevCanDev
      @RajeevCanDev Рік тому +1

      Literally, maybe just because I'm watching while I'm not in complete attention but still the optimal approach feels like it comes with a completely different path as compared to normal intuitive thought process

  • @utkarshpundeer07
    @utkarshpundeer07 14 днів тому

    Understood 👍

  • @harshilpatel3205
    @harshilpatel3205 3 місяці тому

    Understood 🙏🏻

  • @swapnilingale4164
    @swapnilingale4164 Рік тому

    Nice explation ❤

  • @sauravchandra10
    @sauravchandra10 Рік тому

    Understood, thanks!

  • @rowgha2710
    @rowgha2710 Рік тому +1

    What if the array contains 0s?

  • @parshchoradia9909
    @parshchoradia9909 Рік тому

    Understood Sir!

  • @aashapun6533
    @aashapun6533 Рік тому

    The Best♥

  • @Braveuser-x7j
    @Braveuser-x7j Рік тому

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

  • @her_soulmate
    @her_soulmate Рік тому

    Understood 🎉

  • @konankikeerthi
    @konankikeerthi 5 місяців тому

    Thanks bro. Understood

  • @kingbadshah452
    @kingbadshah452 10 місяців тому

    understood striver thanks

  • @madeupofstarstuff3067
    @madeupofstarstuff3067 Рік тому

    Dronacharya from 21st century!!

  • @piyushnandardhane1432
    @piyushnandardhane1432 Рік тому

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

  • @mozsty
    @mozsty 6 місяців тому

    very nice. .thankyou

  • @AdityaKumar-ow1rh
    @AdityaKumar-ow1rh Рік тому

    we can also do this problem by sliding window technique

  • @Indiiaa744
    @Indiiaa744 3 місяці тому

    Bro u are looking like virat ❤

  • @VnALShorts
    @VnALShorts Рік тому

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

  • @samyakagarwal1777
    @samyakagarwal1777 8 місяців тому

    thank you so much

  • @universalcosmologist3675
    @universalcosmologist3675 4 місяці тому +1

    i can think of brute and better solution but optimal can't be thought all by myself but is too confusing

  • @AbhishekBhattacharjee-j2m
    @AbhishekBhattacharjee-j2m Рік тому

    UNDERSTOOD

  • @MohitKumar-o3l1u
    @MohitKumar-o3l1u 9 місяців тому

    Understood.