LeetCode Find First and Last Position of Element in Sorted Array Solution Explained - Java

Sdílet
Vložit
  • čas přidán 11. 09. 2019
  • The Best Place To Learn Anything Coding Related - bit.ly/3MFZLIZ
    Join my free exclusive community built to empower programmers! - www.skool.com/software-develo...
    Preparing For Your Coding Interviews? Use These Resources
    --------------------
    (My Course) Data Structures & Algorithms for Coding Interviews - thedailybyte.dev/courses/nick
    AlgoCademy - algocademy.com/?referral=nick...
    Daily Coding Interview Questions - bit.ly/3xw1Sqz
    10% Off Of The Best Web Hosting! - hostinger.com/nickwhite
    Follow My Twitter - / nicholaswwhite
    Follow My Instagram - / nickwwhite
    Other Social Media
    ----------------------------------------------
    Discord - / discord
    Twitch - / nickwhitettv
    TikTok - / nickwhitetiktok
    LinkedIn - / nicholas-w-white
    Show Support
    ------------------------------------------------------------------------------
    Patreon - / nick_white
    PayPal - paypal.me/nickwwhite?locale.x...
    Become A Member - / @nickwhite
    #coding #programming #softwareengineering
  • Věda a technologie

Komentáře • 106

  • @eshagupta9407
    @eshagupta9407 Před 4 lety +91

    Got it in an interview today! Thanks a ton!

    • @abarag8
      @abarag8 Před 2 lety +5

      Which company? What other questions were asked?

    • @KcClips
      @KcClips Před 2 lety +1

      @@abarag8 Are You doing Job ?

  • @debasismandal1924
    @debasismandal1924 Před 3 lety +25

    He made it seems so easy * meanwhile me stuck on this one since last hr * Thanks!

  • @Ola-xx4zh
    @Ola-xx4zh Před 4 lety +19

    Man, I was struggling with this for a long while and couldn't find a good explanation anywhere, until I found you and I think, I finally got it. You are doing a really good job, thanks!

  • @tannerbarcelos6880
    @tannerbarcelos6880 Před 3 lety +7

    I knew binary search was needed when hearing “sorted” then hearing “log N” supported that idea. However, the disconnect I was having was how to slightly tweak the search to accommodate for multiple targets in a row and get the left and right most. This video helped solve that disconnect. Thanks bro 🙏🏼

  • @akshaydwivedi935
    @akshaydwivedi935 Před 4 lety +68

    All your videos are exceptionally good better then other fancy programmers.

    • @RaymondLo84
      @RaymondLo84 Před 4 lety +8

      Not sure why but there are lots of Indian coding tutorials and always have a hard time understanding what they are trying to teach.

    • @andrewsavin9596
      @andrewsavin9596 Před rokem

      @@RaymondLo84 🙂

  • @borishuang887
    @borishuang887 Před 3 lety +2

    Simple and straightforward. No BS. Just hit it right on point. just a clean code and well-structural linear flow. thank you.

  • @davaa847
    @davaa847 Před 4 lety +2

    Learned a lot from you, not only problem solution but also coding style.
    I watch your solution even I got my own solution to optimize my coding style and readability, This one was mindblowing my run time was also 0ms 100% BUT my code readability was not up to your standard. Keep doing the good work man.

  • @sarvottampriyadarshee5425
    @sarvottampriyadarshee5425 Před 4 lety +17

    Thanks man! You saved me!
    and that Keyboard sound is so satisfying!

  • @kumarc4853
    @kumarc4853 Před 3 lety

    Nick White for President of Programming.
    I got a variation of this in a interview recently, which is find the last index of an element in sorted array, whose index is equal to the value.
    The technique to find first or last was very helpful.

  • @saravanansarangan7035
    @saravanansarangan7035 Před 4 lety +5

    Easily readable code Nick great work.. Thank you...

  • @wendywang8535
    @wendywang8535 Před 3 lety +3

    Great Explanation!! Much better than those few lines code, and also I think this is really good for interview, you can explain your idea very clear. Thank you!

  • @nawaz_haider
    @nawaz_haider Před 2 lety

    I've watched 3 videos for this problem. But this one is the best. Thanks Nick.

  • @gourabbanerjee4152
    @gourabbanerjee4152 Před 4 lety

    Excellent Description ! The best solution explanation I have found for this problem. Thank you!!

  • @fengxie4762
    @fengxie4762 Před 4 lety

    The logic is so clear and the explanation is very easy to understand! Thx!

  • @bmy4415
    @bmy4415 Před 4 lety +2

    What a nice explanation! This really helped me. Thanks

  • @rovingravi4603
    @rovingravi4603 Před 4 lety

    Great explanation, very readable and clean coding... Thanks for sharing!!

  • @kahizer
    @kahizer Před 3 lety +1

    very neat code, nice way of using methods rather than optimizing code lines and making it very hard to understand it. Very well explained

  • @rchukkapalli1
    @rchukkapalli1 Před 4 lety

    Good explanation. Subscribed!

  • @Leo-zh2or
    @Leo-zh2or Před 2 lety

    Nice solution. Easy to understand. Good job. Thanks.

  • @gaurbasu5274
    @gaurbasu5274 Před 4 lety

    Great Explanation!

  • @PramodRj
    @PramodRj Před 3 lety

    Great Video Nick!! Thanks

  • @ankurranjan3218
    @ankurranjan3218 Před 3 lety

    This is really a good solution. Kudos @Nick

  • @ZhouHaibo
    @ZhouHaibo Před 3 lety

    Pretty easy and clear, add 1 earlier break when first index is -1.
    ```
    result[0] = findStartIndex(nums, target);
    if (result[0] == -1) {
    result[1] = -1;
    return result;
    }
    ```

  • @surajpenugonda4756
    @surajpenugonda4756 Před 4 lety +2

    Nice work bro

  • @shivalikagupta3433
    @shivalikagupta3433 Před 2 lety

    U had done same, just that i was writing the list.get(mid)==target condition first followed by other conditions(start = mid+1 or end = mid-1 as and when) Following this same as you did, I finally arrived at my answer. Thanks !!!:))

  • @huihuang2294
    @huihuang2294 Před 4 lety +1

    Thank you for sharing

  • @tusharpadihar7030
    @tusharpadihar7030 Před 4 lety +2

    You are a genius ❤️

  • @044_karan9
    @044_karan9 Před 4 lety

    outstanding explanation

  • @surajgrandhi6742
    @surajgrandhi6742 Před 3 lety

    Amazing solution

  • @user-hq6zx2ds2r
    @user-hq6zx2ds2r Před 4 lety

    It's good!Thanks for sharing!

  • @Taheershaik
    @Taheershaik Před 2 lety

    Clean... Great job, thanks mate.

  • @ManishKumar-xt6kf
    @ManishKumar-xt6kf Před 3 lety

    Thank u
    U explained it in simple way

  • @yashwantkumar4998
    @yashwantkumar4998 Před 4 lety

    you are superb bro !

  • @notgaurav
    @notgaurav Před 4 lety

    really good! keep it up

  • @sharuk3545
    @sharuk3545 Před 3 lety

    Awesome solution

  • @alibaba998
    @alibaba998 Před 4 lety +12

    Great video. One comment, If the firstIndex==-1 then we don't need to call the secondIndex binarySearch, right?

    • @miashani
      @miashani Před 3 lety +2

      correct, and also if it is NOT -1, I'd start findEndIndex with firstIndex+1 (add parameter to finction...)

    • @Abhishek_Poddar
      @Abhishek_Poddar Před 3 lety

      @@miashani but it won't create some significance change in time complexity of the problem or it will be ? ....cuz binary search will be like the way it is !!

  • @yashspr
    @yashspr Před 4 lety

    Simple and elegant explanation! Amazing man

  • @satyamgupta6030
    @satyamgupta6030 Před rokem +1

    thanks thanks alot nick brother.
    Please keep on making such videos.
    your leetcode solution videos help students all over the world.

  • @tuannguyentranle7151
    @tuannguyentranle7151 Před 4 lety +1

    So fancy ;))) thanks a lot

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

    Well explained

  • @suprathikm3639
    @suprathikm3639 Před 3 lety

    awesome Nick

  • @prathamchitransh5338
    @prathamchitransh5338 Před 2 lety

    Best Solution for this problem.

  • @dinamohamed13600
    @dinamohamed13600 Před rokem

    very helpful thanks

  • @free-palestine000
    @free-palestine000 Před 4 lety +1

    nick white >>>>

  • @harikrishnak721
    @harikrishnak721 Před 4 lety

    Thanks nick

  • @lifeofme3172
    @lifeofme3172 Před 4 lety

    Awesome video

  • @farzanehahmadi9410
    @farzanehahmadi9410 Před 3 lety

    you rock bro!

  • @AshishKumar-dn6jc
    @AshishKumar-dn6jc Před 2 lety

    Thanks man!

  • @fulinaround
    @fulinaround Před 4 lety

    Instead of combing through the discussion boards I check your channel first, leetcode solution , and discussion board last.

  • @ahmetozdemir2207
    @ahmetozdemir2207 Před 3 lety +1

    If I remember this correctly, there was a better solution which does not solve this problem with 2 binary search. One is enough actually. While you are searching for a target value, you just have to remember last "smaller" and "bigger" number of target and maybe their indices. Then you simply add 1 to smaller value's index and subtract 1 to other index.

  • @rupaldesai7098
    @rupaldesai7098 Před 4 lety +3

    If the target value occurs only once in the input array then the result[0] = indexvalue and result[1] = -1? Please correct if I am wrong..

    • @NickWhite
      @NickWhite  Před 4 lety +6

      result[0] = indexvalue and result[1] = indexvalue. They would equal the same index value because there is only one occurrence of target in the array. That's why the conditions are = because they will find the target but then keep going to make sure it's not the only occurrence. At the end of each loop if they have seen the target we will set the index variable to the index we saw the target at

    • @rupaldesai7098
      @rupaldesai7098 Před 4 lety +1

      @@NickWhite Got it! Thanks

  • @StayPuft787
    @StayPuft787 Před 2 lety

    7:52 So ye, for the last index I just used the same code but removed the equals sign. if (nums[midpoint] > target) {
    end = midpoint - 1;} and it also worked

  • @vaibhavjain4710
    @vaibhavjain4710 Před 4 lety

    I have done using recrusive solution but got me error . Thanks for iterative version of the problem.

  • @chillu420
    @chillu420 Před 2 lety +2

    the video is at 1.4K likes right now, Can we make it to be more liked than the actual leetcode question likes in this particular video i.e 1.9k

  • @akshaybhosale2724
    @akshaybhosale2724 Před 2 lety

    Why did we not do linear search again? Did I miss something?
    start a loop with start and end as -1
    when you see the target first time set start = i and then till i is greater than target set end = i-1 and return.

  • @somyasinha6293
    @somyasinha6293 Před rokem +1

    U did not check for the corner cases i.e when the mid = target so in that case we need to check that mid==0 || nums[mid-1]!=nums[mid] then return mid;

  • @shubhamuniyal2417
    @shubhamuniyal2417 Před 4 lety

    Smooothhhh!!!!

  • @somyasrivastava6315
    @somyasrivastava6315 Před 2 lety

    you are Amazing

  • @anmolverma075
    @anmolverma075 Před rokem

    At 8:13 , what is the difference between the condition of this function and for the start index function?
    I don't understand because they are basically the same.
    Can anyone explain?

  • @visheshsahu-yn8wz
    @visheshsahu-yn8wz Před rokem

    big fan bro

  • @abhishekkumarsinghA
    @abhishekkumarsinghA Před 2 lety

    awesome

  • @yahwehagape
    @yahwehagape Před 4 lety

    Is it bad practice to rely on int casting to take the floor?

    • @hritwiksom3032
      @hritwiksom3032 Před 3 lety

      This is implicit casting so I don't see why it would be.

  • @nhht77
    @nhht77 Před 4 lety +2

    Somehow, I tried the same method in Javascript but it didn't work. It works well on Java.

    • @aman4434
      @aman4434 Před 3 lety

      Because mid in javascript will give decimal values on dividing by 2! Just tried myself and found out :)

  • @akshatshah3013
    @akshatshah3013 Před 4 lety +1

    Why cant we use the indexOf() and lastIndex() methods and store them in result?

    • @hritwiksom3032
      @hritwiksom3032 Před 3 lety

      We can but in an interview, the interviewer won't be happy with it or ask for the logic anyway

  • @benjaminmalley5719
    @benjaminmalley5719 Před 4 lety

    Did you consider binary search for this problem?

  • @ethanhuang2127
    @ethanhuang2127 Před 4 lety

    Since the time complexity only considers the worst case, if all integers in the list are the same, the time complexity would be O(n)...
    I have a not-so-smart proposal --"how about searching for targart-(smallest number) and target+(smallest number) and return the closest index?

    • @maddinmanek8679
      @maddinmanek8679 Před 4 lety +1

      The time complexity would still be a fast binary search - and meet the log n. That only one of each occurs would make no difference in that.

    • @maddinmanek8679
      @maddinmanek8679 Před 4 lety +1

      Of course you could check is first and last element are the same before running the algorithm.

  • @NickKravitz
    @NickKravitz Před 4 lety

    Nice explanation, but you have broken the "don't repeat yourself" rule. Methods are similar enough to combine into a single method with a boolean startingOrEnding input variable.

  • @thesuburbanerrorist9727

    Dude you are like my hero and shit.

  • @rubyjiang8836
    @rubyjiang8836 Před 2 lety

    so smart

  • @RawBert
    @RawBert Před 2 lety

    there’s a better way, get index of first, then with that index look at how long it goes

  • @adjmonkey
    @adjmonkey Před 4 lety

    Why not just find any index of it with a normal binary search and then just move two pointers left and right until it changes? Then just an initialize an array with those pointers+-1? That would be faster unless the array has 10,000 of 1 value (or something obtuse like that) and a lot less code.

    • @RhymesWithCarbon
      @RhymesWithCarbon Před 4 lety

      adjmonkey this is along the same lines as what i was thinking, have two pointers, one far left and one far right, and start moving towards the middle. If one pointer finds a match, keep it moving until it finds another match. Then: if the unmatching Pointer and matching pointer overlap, stop, you know there’s only one match at all. Or if the unmatching pointer gets a hit, stop.

    • @bestsaurabh
      @bestsaurabh Před 4 lety +3

      That would be linear time complexity. Imagine having an array of same number repeating n times.

  • @jashbhatia3948
    @jashbhatia3948 Před 3 lety

    Question: Why not just find the left most index and then traverse through the array till we keep finding duplicates?

    • @fhantom784
      @fhantom784 Před 3 lety +1

      That'd be O(n) in the worst case (e.g. an array of all 8s).
      What you could do though is use the left index as "start" when searching for the right index.

  • @svalyavasvalyava9867
    @svalyavasvalyava9867 Před 3 lety

    Can, please, someone explain why
    start + (end - start) / 2
    is preferrable to
    (start + end) / 2
    Thanks in advance.

  • @a4ankit27
    @a4ankit27 Před 4 lety

    Why does this code return -1, -1 for me ? Any guesses , what i might me missing ?

    • @a4ankit27
      @a4ankit27 Před 4 lety

      var searchRange = function(nums, target) {
      let array = [];
      array[0] = firstIndex(nums, target);
      array[1] = lastIndex(nums, target);
      return array;
      }
      var firstIndex = function(nums, target) {
      let index = -1;
      let start = 0;
      let end = nums.length -1;

      while (start = target) {
      end = middle -1
      } else {
      start = middle +1;
      }
      if(nums[middle] == target) {
      index = middle;
      }
      }
      return index;
      }
      var lastIndex = function(nums, target) {
      let index = -1

      let start = 0;
      let end = nums.length -1;

      while (start

    • @paveldubinin515
      @paveldubinin515 Před 4 lety +1

      @@a4ankit27 your "middle" is float (use Math.floor() to convert to integer). He uses java and his variables are typed int so this happens automatically there.

  • @amansayer4943
    @amansayer4943 Před rokem

    class Solution {
    public int[] searchRange(int[] nums, int target) {
    int[] ans = {-1, -1};
    // First Occurrence
    int start = 0, end = nums.length - 1;
    int mid = (start + end) / 2;
    while (start nums[mid]) {
    start = mid + 1;
    }
    }
    // Last Occurrence
    start = 0;
    end = nums.length - 1;
    while (start nums[mid]) {
    start = mid + 1;
    }
    }
    return ans;
    }
    } clean code

  • @existenence3305
    @existenence3305 Před 4 lety

    Binary Search. Binary Search. Binary Search.

  • @RaymondLo84
    @RaymondLo84 Před 4 lety

    I still really hate people writing code like those compressed javascripts with 1 line does all... I really don't think that's how the real world works...

  • @dushyantjakhar1716
    @dushyantjakhar1716 Před 2 lety

    Everything is good but sound is not balance

  • @kingthunder9787
    @kingthunder9787 Před 4 lety

    Hi

  • @TheBestNameEverMade
    @TheBestNameEverMade Před 3 lety

    You don't need 2 binary searches.

    • @hritwiksom3032
      @hritwiksom3032 Před 3 lety +1

      You mean you don't need 2 functions, two searches are obviously needed.

    • @TheBestNameEverMade
      @TheBestNameEverMade Před 3 lety +2

      @@hritwiksom3032 no he throws away information the way he does the search.
      You could split it into two and use the bounds found in the first as a starting point for the second. However you might as well just search for both at once and adjust both upper and lower ranges.
      At the very minimum he could have used the returned lower bound as the min range for the second algorithm, saving having to search the start of the array. Still that throws away information learned about the upper bound.