Majority Element II | Brute-Better-Optimal

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • Problem Link: bit.ly/3vIsCTH
    Notes/C++/Java/Python codes: takeuforward.org/data-structu...
    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
    0:00 Introduction of Course
    01:12 Problem Statement
    02:02 Observation
    03:46 Brute force using Looping
    05:32 Pseudocode
    07:25 Complexity
    07:59 Better approach using Hashing
    11:49 Pseudocode
    13:08 Complexity
    14:39 Optimal approach n/2 times (Extended Boyer Moore’s Voting Algorithm)
    14:54 Code
    15:10 Intuition for n/3 times
    19:14 Dry run
    22:37 Code
    25:47 Complexity

Komentáře • 263

  • @takeUforward
    @takeUforward  Před rokem +113

    Do give us a like, it won't cost you anything, but it will motivate me more. Also don't forget to comment "understood" if you did.

  • @utsavseth6573
    @utsavseth6573 Před rokem +115

    When will this damn interviewer be happy? 😂😂😂😂

  • @AbjSir
    @AbjSir Před 9 měsíci +54

    If anyone is confused as to why are we manually checking, we are doing it because it is not guarenteed in the question that there are 2 majority elements, there can be 0,1 or 2 majority elements

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

      Thankyou so much

    • @kaushalsingh2656
      @kaushalsingh2656 Před měsícem +2

      manual checking is for cases where no such element exists.
      {1,2,3,4,5,6}
      candidate1 = 6 after processing for loop.
      But it is not so we check by using frequency test.
      If it fails = return -1
      else
      return candidate.

  • @leetcoder6569
    @leetcoder6569 Před rokem +35

    Bhya I've just completed your Dp playlist, i am amazed how beautifully u interconnect previous concepts into new questions like in 0/1, unbounded ,MCM.. Thanks a lot again, now I've confidence to solve any DP question...

    • @manan-543
      @manan-543 Před 11 měsíci

      How did u go about solving DSA problems. Do u read the question on leetcode or coding ninja and try to come up with a Brute better optimal solution. Or u directly watch the solution video and then try to solve the problem.

    • @leetcoder6569
      @leetcoder6569 Před 11 měsíci +1

      @@manan-543 bro, for approaching any dsa problem i personally follow these steps.
      1. Reading the problem statement(at least twice)
      2. Dry run, needless to say most important step
      3. Writting algorithm and pseudo code on my notebook.
      4. Code part
      5. Intuition
      6. Complexity Analysis.
      And lastly, plateform doesn't matter, i mainly solve on codeforces and leetcode and sometimes gfg..

    • @manan-543
      @manan-543 Před 11 měsíci

      @@leetcoder6569 thanks for advice . But what i meant is that if you're new to a topic like u mentioned dynamic programming, do u watch the video solution from striver first and then code it? Or do u first read the question and try to come up with a solution on your own.

    • @leetcoder6569
      @leetcoder6569 Před 11 měsíci +3

      @@manan-543 i solve it on my own at first, and i watch striver video only for optimal approaches.

  • @LeelaLakshmiKundi
    @LeelaLakshmiKundi Před 9 měsíci +2

    The way you simplifies the things is amazing❤❤❤

  • @NithinvKumar-uk2he
    @NithinvKumar-uk2he Před rokem +31

    Bhaiya please please upload the video daily from now onwards placement are coming so please from today onwards upload daily it will be so helpful in parallel to that take care of your health you are providing a free education we all always pray you to be healthy and wealthy

  • @cinime
    @cinime Před rokem +1

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

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

    Beautifully explained. Good work Raj.

  • @it_08amanagarwal35
    @it_08amanagarwal35 Před rokem +3

    Bro that simulation of code is amazing ❤❤❤

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

    very nice videos!! keep making them. Thank you!!

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

    Understood, thank you striver for this amazing video.

  • @kunalchhetri8401
    @kunalchhetri8401 Před 5 měsíci +2

    Great explanation. Adding on to the above explanation. If we change the placement of 3rd and 4th else if condition to first and second then we don't need to write extra steps.
    Example:
    for(int i=0; i

  • @sukhpreetsingh5200
    @sukhpreetsingh5200 Před rokem +1

    Understood Awesome as usual

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

    Chamak gya concept striver bhaiyaa❤

  • @praveennemagoudar3442
    @praveennemagoudar3442 Před 3 měsíci +1

    Understood bro. awesome explaination.

  • @Upasana_Raghav
    @Upasana_Raghav Před rokem +2

    Thankyou! You're the best.

  • @242deepak
    @242deepak Před rokem +15

    i didn't understand the intuition in the optimal solution of this problem even though I understood the Moore's voting algorithm

  • @Raj10185
    @Raj10185 Před rokem

    Tysm Striver Understood everything

  • @ankitamishra7510
    @ankitamishra7510 Před 3 měsíci +1

    Understood!!
    And I wish I could have knew about this Channel earlier 😢

  • @mehulthuletiya497
    @mehulthuletiya497 Před rokem +23

    How to enable Dark mode in TUF Website ?
    01:12 Problem Statement
    02:02 Observation
    03:46 Brute force using Looping
    05:32 Pseudocode
    07:25 Complexity
    07:59 Better approach using Hashing
    11:49 Pseudocode
    13:08 Complexity
    14:39 Optimal approach n/2 times (Extended Boyer Moore’s Voting Algorithm)
    14:54 Code
    15:10 Intuition for n/3 times
    19:14 Dry run
    22:37 Code
    25:47 Complexity

  • @roxk6344
    @roxk6344 Před rokem +7

    i was able to solve it on my own cuz i've watched the previous majority n/2 ele video carefully .ty bhaiya

  • @shandilyasushant
    @shandilyasushant Před rokem

    Understood and waiting for more stuff

  • @tanya8353
    @tanya8353 Před 7 měsíci

    Great job mann!!

  • @sauravchandra10
    @sauravchandra10 Před rokem +1

    Understood, thanks!

  • @udaytewary3809
    @udaytewary3809 Před rokem

    Understood bhaiya 🙏 ❤️

  • @ArpanChakraborty-do6yz
    @ArpanChakraborty-do6yz Před 6 měsíci

    awesome content , love from westbengal🤗🤗🤗

  • @yamini436
    @yamini436 Před rokem

    understood thankyou so much striver :)

  • @AliHassan-li1kv
    @AliHassan-li1kv Před 8 měsíci +1

    set MajorityElementByCountThree(vector arr){
    int count = 0;
    int threshold = arr.size() / 3;
    map Leader;
    set elements;
    for(int i = 0 ; i < arr.size() ; i++){
    Leader[arr[i]]++;
    if(Leader[arr[i]] > threshold){
    elements.insert(arr[i]);
    }
    }
    return elements;
    }
    More optimal

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

    Understood. Thank you.

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

    Understood!🤩

  • @YourCodeVerse
    @YourCodeVerse Před 9 měsíci +1

    Understood✅🔥🔥

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

    Thanks Striver!

  • @Gaurav_Tripathi_
    @Gaurav_Tripathi_ Před 8 měsíci

    Understood bhaiya..!!

  • @aysams2
    @aysams2 Před rokem +2

    19:05 - bro wtf... I listened to you and side by side made notes as if this pseudocode was the exact ans to this problem. LOL 😂

  • @cheddar4848
    @cheddar4848 Před rokem +5

    Hey @takeUforward
    Rather than checkng if the any element is being already tracked at the other count, can we change the order of checking. I was wondering if this will work always, it seems to be working for me.
    class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
    ele1 = None
    ele2 = None
    c1 = 0
    c2 = 0
    # checking if the element is equal first rather than if count is zero.
    for ele in nums:
    if ele == ele1:
    c1+=1
    elif ele == ele2:
    c2+=1
    elif c1==0:
    ele1 = ele
    c1+=1
    elif c2==0:
    ele2 = ele
    c2+=1
    else:
    c1-=1
    c2-=1
    c1 = 0
    c2 = 0
    for ele in nums:
    if ele == ele1:
    c1+=1
    elif ele == ele2:
    c2+=1
    n=len(nums)
    res = []
    if c1>n//3:
    res.append(ele1)
    if c2>n//3:
    res.append(ele2)
    return res

  • @AniketKumar-hf2bo
    @AniketKumar-hf2bo Před 5 měsíci +1

    understood thnx for the video ❤❤❤❤👌👌👌👌💕💕

  • @shuvbhowmickbestin
    @shuvbhowmickbestin Před 5 měsíci +3

    One question, do we even need to do the optimal algorithm? I mean the folks taking the interview are mostly pleased with a working solution. Even though the optimal algorithm is actually more optimized in terms of space but it is less readable and also very verbose than the better solution which might be a drawback. Speaking from experience.

    • @AryanSharma-tp8tx
      @AryanSharma-tp8tx Před 2 měsíci

      It's not necessary for the interview but it's necessary for the coding round, the better the code more the chances you are going in second round.

  • @luckshaeey
    @luckshaeey Před rokem +1

    Understood ✨

  • @Parth-Sharma
    @Parth-Sharma Před 6 měsíci

    UNDERSTOOD!

  • @itsabhinav04
    @itsabhinav04 Před rokem

    Understood, thanks :)

  • @chinmay6152
    @chinmay6152 Před rokem +2

    I hope you are also doing well, take care 👍

  • @abhisheksa6635
    @abhisheksa6635 Před 8 měsíci +1

    Ahh one question, that el and cnt logic was meant to do what exactly in the bigger scheme, because el1, el2 and cnt1, cnt2 are done for tracking two elements, I just tried this array [1,1,3,2,1,4,4,1] in the hopes to find some understanding, does it tell us the max frequency number and hence we use both el1 and el2 to get two most frequently happening numbers? In this array [1,1,3,2,1,1,4,4,4] we should get el as the highest frequency 1 but we get 4, then what is the need of doing this?

  • @rajatpatra2593
    @rajatpatra2593 Před rokem

    Understood ❤️

  • @PSMADHURIHSIIPCMCREG
    @PSMADHURIHSIIPCMCREG Před 5 dny

    UNDERSTOOD👍

  • @vinaykrishna747
    @vinaykrishna747 Před rokem +1

    MORE VIDEOS ON SOLVING LEETCODE OR GFG PROBLEMS
    🙏🙏
    TEACH US THE WAY TO APPROACH THE OPT.SOLUTION
    FOR ANY GIVEN PROBLEM

  • @chinmay6152
    @chinmay6152 Před rokem

    Understood ❤

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

    Thanks a lot Bhaiya

  • @user-ik3qu5uy5e
    @user-ik3qu5uy5e Před 5 měsíci

    superb sir

  • @lxshya
    @lxshya Před rokem +1

    thanks!

  • @prasanna9440
    @prasanna9440 Před 11 měsíci

    Understood 😊

  • @swacharahman5084
    @swacharahman5084 Před rokem +5

    Bhaiya please upload daily videos 🙂🙂🙂... Your playlists are the best

  • @her_soulmate
    @her_soulmate Před 10 měsíci

    Understood 🎉

  • @dollar-Coin
    @dollar-Coin Před rokem +5

    Understood #day 5 striver sde sheet. Still long way to go , I am always missing optimal solution 😢

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

    Understood 👍👍

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

    understood !

  • @haramritsingh6521
    @haramritsingh6521 Před rokem

    Understood !

  • @abhijeetmishra3804
    @abhijeetmishra3804 Před 9 měsíci

    understood bhaiya

  • @ShubhamKamboj-wm2oi
    @ShubhamKamboj-wm2oi Před 2 měsíci

    UNDERSTOOD

  • @sumitworld918
    @sumitworld918 Před 7 měsíci

    Thanks ❤

  • @habeeblaimusa4466
    @habeeblaimusa4466 Před rokem

    Understood 😁😁

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

    UNDERSTOOOD

  • @KalkiDang2601
    @KalkiDang2601 Před 8 měsíci

    Understood!!

  • @hritikbhatnagar9616
    @hritikbhatnagar9616 Před rokem

    plz upload the video regularly

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

    Understood😃

  • @john_doe_2231
    @john_doe_2231 Před rokem +1

    You are remaking many of the older array videos , will you be doing the same for LL ,stacks etc ?

  • @manasranjanmahapatra3729

    Understood.

  • @swayam2367
    @swayam2367 Před rokem

    understood👍

  • @jaideepsingh166
    @jaideepsingh166 Před rokem

    Understood :)

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

    tysm sir

  • @GuruPrasadShukla
    @GuruPrasadShukla Před rokem

    thankyou sir

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

    understood 🤩🤩🤩

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

    Understood

  • @hasrat17
    @hasrat17 Před 11 měsíci +3

    Great explaination but @striver can you please tell me why we substract from both cnt1 and cnt2? And can this be implement for any values n/x where x can be 1,2,3,4?

    • @joeljacob4685
      @joeljacob4685 Před 11 měsíci

      Check moore's voting algorithm then you would get the intuiton!! for the first part of the question

  • @culeforever5408
    @culeforever5408 Před 9 měsíci +1

    understood :)

  • @nasim3987
    @nasim3987 Před rokem +2

    clear explenation. this logic is not working in leetcode testcase [1,1,1,2,3,7,8,1,6,9] .I think we need some changes in the logic in case of one element being the answer. This is my first doubt after studying 100s of dsa problems from this channel

    • @takeUforward
      @takeUforward  Před rokem +1

      there can only be one elements as the answer, the example you sharing is an invalid one.

    • @nasim3987
      @nasim3987 Před rokem

      @@takeUforward [1,1,1,2,3,7,8,1,6,9] this test case is invalid ,how?

    • @user-qq5bb7bh5z
      @user-qq5bb7bh5z Před 10 měsíci +1

      verify krenge toh automatically false ele remove ho jayega

    • @kavyahegde3586
      @kavyahegde3586 Před 7 měsíci

      ​@@nasim3987bro u got to know the answer...??

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

      bro in yout example there are only one element which is greater than n/3 and in list answer we have to return list which contain 2 such element which is greater than n/3

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

    awesome

  • @jatinvashisht7153
    @jatinvashisht7153 Před rokem +6

    For optimal , can we do something like sort the array first then using for loop we can have every element's first and last occurences and difference of these two will give the no. of times that particular element occured and if that count is greater than n/3 we'll save it.
    Obviously the T.C. will be nlogn but I think it's good to be optimal and O(n) will be most optimal.

    • @takeUforward
      @takeUforward  Před rokem +8

      that will distort the input array,. so you are involving an extra space in order to solve the problem, but yes this can be a solution as well.

    • @joeljacob4685
      @joeljacob4685 Před 11 měsíci +1

      hey !! I came up with the same brute force approach :D

  • @astitvadubey3036
    @astitvadubey3036 Před 4 měsíci +1

    understood

  • @john_doe_2231
    @john_doe_2231 Před rokem +3

    Small request Striver ,can you please add the new YT video link in the SDE sheet instead ot the older videos

  • @rishitkamboj8078
    @rishitkamboj8078 Před 10 měsíci +1

    Like we used to HashMap(java) to store the frequency , we can use hasharray to do the same as well right?

    • @HarshSingh-fq3dv
      @HarshSingh-fq3dv Před 5 měsíci

      yes you can, but hasharray will not work if N is very large.

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

    Understood....

  • @alphaCont
    @alphaCont Před 7 měsíci

    tnx

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

    Can someone explain the intution behind cancelling both cnts when we come across a different element?

  • @divyatejaswinivengada6368
    @divyatejaswinivengada6368 Před 7 měsíci

    understtooodd

  • @Manishgupta200
    @Manishgupta200 Před rokem

    Great

  • @dayashankarlakhotia4943

    Understood. Edge case also Understood

  • @adarshjaiswal7334
    @adarshjaiswal7334 Před rokem +1

    What's the intution behind doing the manual check? Why can't we get the exact answer just same as n/2 case?

    • @harshgarg594
      @harshgarg594 Před rokem +1

      because it is possible that we have 0 number of answer or 1 number of answer but in case of n/2 its gurranted to have a answer, we simply finding the 2 number which have maximum frequency and then checking they are valid or not
      P.S. pls like the comment if you found helpful

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

    Watch from 15:12 if you've already followed his > n/2 approach problems

  • @rishikakinger7608
    @rishikakinger7608 Před 8 měsíci

    I have a doubt in the optimal answer code: if instead of
    if(cnt2==0 && nums[i]!=ele1){
    ele2=nums[i];
    cnt2=1;
    }
    I replace it with :
    else if(cnt2==0 && nums[i]!=ele1){
    ele2=nums[i];
    cnt2=1;
    }
    The code doesnt pass all test cases. I do not understand why. If both cnt1 and cnt2 are zero it anyways will not be executed since ele1==nums[i]. So why does it fail?

  • @namanjain1684
    @namanjain1684 Před 24 dny

    When current element is not equal to el1 but its equal to el2 then we are increaiong cnt2 but why we are not decreasing the vote for cnt1?

  • @adarshsingh5697
    @adarshsingh5697 Před rokem +1

    class Solution {
    public:
    vector majorityElement(vector& nums) {
    vector ans;
    map mp;
    int n = nums.size();
    int mini = floor(n / 3) + 1;
    for (int i = 0; i < n; i++) {
    mp[nums[i]]++;
    }
    for (auto& p : mp) {
    if (p.second == mini) {
    ans.push_back(p.first);
    }
    }
    return ans;
    }
    }; what is wrong in this code?

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

    I did it first😁
    vector majorityElement(vector V) {
    sort(V.begin(),V.end());
    vector ls;
    int n=V.size();
    int el = V[0];
    int count = 1;
    for(int i=1 ; i(n/3)){
    ls.push_back(el);
    }
    el = V[i];
    count = 1;
    }

    }

    return ls;
    }

  • @hyndavibandlas1-658
    @hyndavibandlas1-658 Před měsícem

    We inspire by u striver, can we know by whom u inspire or inspired by??

  • @btw_its_eshan
    @btw_its_eshan Před rokem +2

    why we do cnt1-- and cnt2-- both?? please tell logic behind this

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

      because int final answer list we can have max to max 2 element only

  • @ItachiGamer28
    @ItachiGamer28 Před 9 měsíci +1

    6:40
    In this code suppose the array is {1,1,2,2,3,3,4,4} then the TC will be N^2 because inside loop will run for Eveysingle time as nothing will be added in list.
    What if instead we right condition as if i==0 || nums[i] ! = nums[i-1] so here it will skip the number which are repeated!!
    Anyone can Correct me if I am wrong. Your most welcome.

    • @dhruvchopra26
      @dhruvchopra26 Před 7 měsíci

      it is not given in the question that the array will be sorted

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

      I thinking the code is wrong because it checks the 0th index in the list but the array can be of any order so I think he made a mistake

  • @vggamingcentre5506
    @vggamingcentre5506 Před 11 dny

    Sir the brute approach is not working instead if the ls[0] we have to use the find(ls.begin() , ls.end() , nums[i]) != ls.end()

  • @jasreenkaur7347
    @jasreenkaur7347 Před 9 dny

    Sir, in the optimal approach, we hv taken two separate variables for storing the two majority elements. And here the array size is just 8. What if the array size is 10 or something. In that case, we can hv more than 2 majority elements. How can Moore's voting algorithm be applied in that case.

  • @harshit.53
    @harshit.53 Před 6 měsíci +1

    can someone explain why we are doing c1- - as well as c2 - - in the else part of the optimal approach. Logically one element should cancel out only one other element so why are we cancelling out two elements against 1 element.

    • @aryanchaurasia1081
      @aryanchaurasia1081 Před 10 dny

      I had the same question. If u find the answer then let me know

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

    20:29 Can anyone please help me on why else if is so much imp? I mean if both counters are zero, why can't we reset them to 1 at the same time. This is confusing me

  • @ss8273
    @ss8273 Před rokem +1

    in 14:18 code it will add duplicates also

    • @dhruvchopra26
      @dhruvchopra26 Před 7 měsíci

      yes we will need to add an if condition to check if that element is already present or not