Longest Consecutive Sequence (LeetCode 128) | Full solution quick and easy explanation | Interviews

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

КОМЕНТАРІ • 81

  • @vidyasagar4983
    @vidyasagar4983 Місяць тому +2

    When ever I need a solution for any leetcode problem I always look for your channel first.

  • @AadeshKulkarni
    @AadeshKulkarni 8 місяців тому +9

    I would have given up on my DSA journey had you not started this channel, baba!

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

    Why didn't I find this channel early but I'm grateful I found it. Thank you so much, your channel is a real blessing ❤

  • @shweta1013
    @shweta1013 Місяць тому

    Your explaination is so so neat !!!!.. Thanks for your time :)

  • @SevDeuceOff
    @SevDeuceOff 12 днів тому

    When I see such explanations and code to complicated solutions as such, I wonder how someone can come up with this.. I start questioning my career choices and wonder if at all I belong here in software :( Amazing vid as usual !

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

    Great explanation. A very impressive approach. Thank you very much.

  • @sreeharsharaveendra289
    @sreeharsharaveendra289 10 місяців тому +1

    For the approach using optimization by sorting, one edge case to solve for would be repeated numbers. For example, take [1, 2, 0, 1] as input. After sorting it would be [0, 1, 1, 2]. So finding longest sequence, the right answer is [0, 1, 2], but your approach would take [0, 1] or [1, 2] as the final answer. Am curious to know how to handle this case with the sorting approach.

    • @nikoo28
      @nikoo28  9 місяців тому +1

      for a test case : [1, 2, 0, 1]
      the right answer is: [0, 1] or [1, 2]
      0, 1, 2 are not consecutive in your input test case.

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

    you can make it more efficient by adding:
    if (longestLength > nums.length / 2) {
    return longestLength;
    }
    to the end of every iteration, this will check if we have a longestLength that is bigger that 1/2 array

  • @IslamSulaiman-s2n
    @IslamSulaiman-s2n Місяць тому

    Your'e the best, keep going.

  • @techsavy5669
    @techsavy5669 Рік тому +3

    Nice approach. Thank you.

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

      Glad it was helpful!

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

    Getting the time Limit exceeded with the above solution.

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

      The solution passes well on LeetCode. Check the code in video description

  • @candichiu7850
    @candichiu7850 2 роки тому +3

    The best!!! Keep up the great work!!!😃

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

    Best video so far, thank you.

  • @myosith4795
    @myosith4795 10 місяців тому +1

    Brilliant explanation I understand

  • @unknownman1
    @unknownman1 11 місяців тому +4

    Easy solution,
    public int longestConsecutive(int[] nums) {
    HashSet myset = new HashSet();
    int maxsize = 0;
    for(int num: nums){
    myset.add(num);
    }
    for(int num: myset){
    int current = num;
    int current_size = 1;
    if(!myset.contains(current-1)){
    while(myset.contains(current+1)){
    current = current + 1;
    current_size ++;
    }
    maxsize = Math.max(maxsize, current_size);
    }
    }
    return maxsize;
    }

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

      This is nice too! I love Java.
      numSet = set(nums) # remove repetition
      longest = 0
      for n in nums:
      # check if n is the start of a sequence
      # that is, if left neighbour does not exist, then it is the start of a sequence
      if (n-1) not in numSet:
      # if it is, check for consecutive sequence
      length = 0
      while (n + length) in numSet:
      # if right neighbour exist, keep increasing the length
      length += 1
      longest = max(longest, length)
      return longest

  • @manishasharma-mh7fo
    @manishasharma-mh7fo Рік тому

    thanku😇, was struggling a lot to understand this problem...finaallyyyy got the best

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

    excellent solution bro super methodology

  • @HeitorBernardino
    @HeitorBernardino 9 місяців тому +1

    Thanks for de explanation, it was very clear and helpful.
    I have just one question... Why does the solution with map work without something like numberTravelledMap.put(num, Boolean.TRUE); at any moment?

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

      I have the same question. Feels like you can do it with out pre setting of the map to false

  • @prasoonlall9432
    @prasoonlall9432 3 місяці тому +1

    One question Nikhil sir. Where have me marked the first visited elem as true as mentioned in the video at 14:48 ? Am I missing something or its a typo.
    Btw thanks a lot for this beautiful explanation.

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

      yes you are right.

    • @RamPageMMA
      @RamPageMMA Місяць тому

      Exactly, that’s what I’m wondering too!!

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

    I love your all video sir
    You are teaching like in best way ☺️

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

    Hello Nikhil sir, I tried both the sorting approach and the HashMap approach on leetcode. Why does using the map take more time than the sorting approach, even though it is O(n) compared to O(NlogN)?
    Using sorting - 16ms
    Using hashmap - 47ms

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

      how you chechked

    • @puneet8705
      @puneet8705 Місяць тому

      bro don't rely on runtime of leetcode, it will differ every time you submit a code, even the same code may give you different runtime if submitted again and again. That's why we use big O notations to summarize the efficiency.

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

    Thanks for the wonderful explaination

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

      Glad it was helpful!

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

    gr8 explanation 👌👌

  • @parthmodi2028
    @parthmodi2028 9 місяців тому

    Really love ur videos.

    • @nikoo28
      @nikoo28  9 місяців тому

      Thank you so much 😀

  • @RamPageMMA
    @RamPageMMA Місяць тому

    Where in the code are we setting the first number we are currently on from the array to true in the map?

  • @himanshujoshi1848
    @himanshujoshi1848 9 місяців тому

    How is the the time-complexity of brute force is O(n^3)? Shouldn't it be O(n^6)? For example, if the array is [5, 1, 4, 3, 2, 6], then, if we start with 1, we need to traverse the array 5 times to get to the answer?

  • @piyushsinghdtu456
    @piyushsinghdtu456 Місяць тому

    very nice sir

  • @DailyFacts-vu4cv
    @DailyFacts-vu4cv 9 днів тому

    thank you

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

    Nice explanation.. 🎉

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

    what would happen if we did't check whether it had been explored or not? just this part was a little bit confusing for me, but overall great explanation

  • @kash1903
    @kash1903 Місяць тому

    Your video is really helpful brother but in this particular source code there is a minor mistake and i have also checked the source code in your git hub profile "MINOR MISTAKE : Here when we traverse through the hashMap we are not marking it as true for eg: if (numberTravelledMap.get(num) == true) {
    continue;
    } // this will skip it and // Mark the current number as traveled
    numberTravelledMap.put(num, Boolean.TRUE); this was not in the original source code " KINDLY CORRECT ME IF I AM WRONG , BUT ANYWAYS YOUR VIDEOS ARE REALLY HELPFUL FOR MY DSA PREPATATION JOURNEY , GOD BLESS YOU BROTHER ❤

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

    How is this O(n) with the nested while loop? Is it because this would technically be O(n * m) where n is the length of nums and m is the longest possible sequence, and m will always be less than or equal to n so it's negligible to O(n) ? Couldn't this be O(n^2) if all numbers in nums are sequential? Am I close or way off?

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

      even if it is a nested loop, we do not iterate on every element twice. We use the inner loop to move ahead.

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

    why not use a Set add all of the elements to that set, check if that element does not contain any left neighbor just loop through while loop to get the max length say S1 is the set and check S1.contains(num+len) initialize len to be 0. When it comes out of while loop take the longest one. I know the approach is the same with hashmap too but the code is lot less and we can check less conditions
    class Solution {
    public int longestConsecutive(int[] nums) {
    Set S1 = new HashSet();
    int longest = 0, len = 0;
    for(int num:nums) S1.add(num);
    for(int num:nums){
    if(!S1.contains(num-1)){
    len = 0;
    while(S1.contains(num+len)){
    len++;
    }
    longest = Math.max(len, longest);
    }
    }
    return longest;
    }
    }

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

      this method works as well...great job!!

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

    how bruteforce is taking n^3

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

    even after sorting, we need somthing like set, to avoid test cases like: [1,2,0,1]

  • @pratyakshamaheshwari8269
    @pratyakshamaheshwari8269 2 роки тому

    Thank you!

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

    The brute force approach has time complexity n^2 but not n^3.

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

    brute force is o(n^2) not n^3 as you have stated , thanks

  • @user-rh9rk9hx1t
    @user-rh9rk9hx1t 7 місяців тому

    Does this work even for duplicate values in the array?

  • @notmrabhi1
    @notmrabhi1 2 роки тому

    Thanks, bhaiya
    and yes bhaiya try to explain code in C++ also.

    • @nikoo28
      @nikoo28  2 роки тому +1

      it is really hard to explain code in several languages. Everyone has their own preference. But rest assured, if you are following the logic correctly...writing code shouldn't be a problem.

    • @notmrabhi1
      @notmrabhi1 2 роки тому

      @@nikoo28 u r right Bhaiya but just for feedback I said and max programmers prefer C++ as I know, otherwise your words are very clear and stable that anyone can understand.

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

      @@nikoo28 no sir please! your current language is prefect.

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

      sir java is perfect i like ur video@@nikoo28

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

    helpful video :)

  • @atharv9924
    @atharv9924 11 місяців тому

    Didn't you traversed through the input list twice?? Once to create hashmap and next while actually iterating over list.

    • @nikoo28
      @nikoo28  11 місяців тому +1

      yes, so the complexity is O(2 * n) which is equivalent to O(n)

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

    Tnxs sir..... I am from bd🇧🇩......sir can you please make a video about Github....how can open...how can it work....how can we use properly it.....that typ video..... Tnxs once againAs sir❤️

  • @aswanthnarayanan
    @aswanthnarayanan 2 роки тому

    Thanks

  • @omkarkhandalkar8869
    @omkarkhandalkar8869 2 роки тому

    sir can you name that book for learning DsAlgo

    • @nikoo28
      @nikoo28  2 роки тому +1

      The book by Cormen is really exhaustive..covers everything you need to learn

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

    The question mentions that You must write an algorithm that runs in O(n) time but ig this approach takes 0(n^2) time.

    • @honey-xr5kp
      @honey-xr5kp 7 місяців тому

      no, this approach is O(n) time. you only iterate through the array once. With the help of the hashmap, you can cut the time complexity down, at the cost of a little bit extra space.

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

      Absolutely correct

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

    can someone help me with the code for brute force. just for the better understanding of loops.

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

      to understand loops, this problem is not ideal. Nested loops are never easy to look at and understand.

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

    In which language u write this code sir

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

      that is JAVA usually

  • @continnum_radhe-radhe
    @continnum_radhe-radhe Рік тому +1

    ❤❤❤

  • @kag1984007
    @kag1984007 9 місяців тому

    Here is my solution , I think its simpler , please let me know if any issues: public int longestConsecutive(int[] nums) {
    if(nums.length < 2){
    return nums.length ;
    }
    Arrays.sort(nums);
    int lC = 1;
    int longestLc = 1;
    int lastNum = nums[0];
    for(int i = 1 ; i < nums.length ; i++){
    if( nums[i] == lastNum){
    continue;
    }else if(nums[i] == lastNum+1){
    lastNum = nums[i];
    lC++;
    }else{
    lastNum = nums[i];
    if(longestLc < lC){
    longestLc = lC;
    }
    lC = 1;
    }
    }
    if(longestLc < lC){
    longestLc = lC;
    }
    return longestLc;
    }

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

    you didnt even run your code

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

      check out my code on github...link available in description

  • @honey-xr5kp
    @honey-xr5kp 6 місяців тому

    a question i have: the first while loop when you search for nextNum (&& exploreMap.get(nextNum) == false) and the second while loop when you search for prevNum (&& !exploreMap.get(prevNum). The first one you say if it equals false. The second one you just use an exclamation point. Is this doing the same thing, or is it different? If it is the same, why did you do it in 2 different ways? It just confuses me a little bit.

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

      You are checking in both directions

  • @subee128
    @subee128 10 місяців тому +1

    Thank you