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

  Рет қаралды 73,356

Nick White

Nick White

4 жыл бұрын

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

Пікірлер: 106
@eshagupta9407
@eshagupta9407 4 жыл бұрын
Got it in an interview today! Thanks a ton!
@abarag8
@abarag8 2 жыл бұрын
Which company? What other questions were asked?
@KcClips
@KcClips 2 жыл бұрын
@@abarag8 Are You doing Job ?
@debasismandal1924
@debasismandal1924 3 жыл бұрын
He made it seems so easy * meanwhile me stuck on this one since last hr * Thanks!
@Ola-xx4zh
@Ola-xx4zh 4 жыл бұрын
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 3 жыл бұрын
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 🙏🏼
@borishuang887
@borishuang887 3 жыл бұрын
Simple and straightforward. No BS. Just hit it right on point. just a clean code and well-structural linear flow. thank you.
@akshaydwivedi935
@akshaydwivedi935 4 жыл бұрын
All your videos are exceptionally good better then other fancy programmers.
@RaymondLo84
@RaymondLo84 4 жыл бұрын
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 Жыл бұрын
@@RaymondLo84 🙂
@sarvottampriyadarshee5425
@sarvottampriyadarshee5425 4 жыл бұрын
Thanks man! You saved me! and that Keyboard sound is so satisfying!
@davaa847
@davaa847 4 жыл бұрын
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.
@wendywang8535
@wendywang8535 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!
@saravanansarangan7035
@saravanansarangan7035 4 жыл бұрын
Easily readable code Nick great work.. Thank you...
@gourabbanerjee4152
@gourabbanerjee4152 4 жыл бұрын
Excellent Description ! The best solution explanation I have found for this problem. Thank you!!
@fengxie4762
@fengxie4762 4 жыл бұрын
The logic is so clear and the explanation is very easy to understand! Thx!
@rovingravi4603
@rovingravi4603 4 жыл бұрын
Great explanation, very readable and clean coding... Thanks for sharing!!
@nawaz_haider
@nawaz_haider 2 жыл бұрын
I've watched 3 videos for this problem. But this one is the best. Thanks Nick.
@bmy4415
@bmy4415 4 жыл бұрын
What a nice explanation! This really helped me. Thanks
@kahizer
@kahizer 4 жыл бұрын
very neat code, nice way of using methods rather than optimizing code lines and making it very hard to understand it. Very well explained
@Leo-zh2or
@Leo-zh2or 2 жыл бұрын
Nice solution. Easy to understand. Good job. Thanks.
@kumarc4853
@kumarc4853 3 жыл бұрын
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.
@ankurranjan3218
@ankurranjan3218 3 жыл бұрын
This is really a good solution. Kudos @Nick
@rchukkapalli1
@rchukkapalli1 4 жыл бұрын
Good explanation. Subscribed!
@gaurbasu5274
@gaurbasu5274 4 жыл бұрын
Great Explanation!
@PramodRj
@PramodRj 3 жыл бұрын
Great Video Nick!! Thanks
@shivalikagupta3433
@shivalikagupta3433 2 жыл бұрын
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 !!!:))
@ManishKumar-xt6kf
@ManishKumar-xt6kf 3 жыл бұрын
Thank u U explained it in simple way
@user-hq6zx2ds2r
@user-hq6zx2ds2r 4 жыл бұрын
It's good!Thanks for sharing!
@huihuang2294
@huihuang2294 4 жыл бұрын
Thank you for sharing
@satyamgupta6030
@satyamgupta6030 Жыл бұрын
thanks thanks alot nick brother. Please keep on making such videos. your leetcode solution videos help students all over the world.
@Taheershaik
@Taheershaik 2 жыл бұрын
Clean... Great job, thanks mate.
@surajpenugonda4756
@surajpenugonda4756 4 жыл бұрын
Nice work bro
@044_karan9
@044_karan9 4 жыл бұрын
outstanding explanation
@surajgrandhi6742
@surajgrandhi6742 4 жыл бұрын
Amazing solution
@alibaba998
@alibaba998 4 жыл бұрын
Great video. One comment, If the firstIndex==-1 then we don't need to call the secondIndex binarySearch, right?
@miashani
@miashani 3 жыл бұрын
correct, and also if it is NOT -1, I'd start findEndIndex with firstIndex+1 (add parameter to finction...)
@Abhishek_Poddar
@Abhishek_Poddar 3 жыл бұрын
@@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 !!
@notgaurav
@notgaurav 4 жыл бұрын
really good! keep it up
@tusharpadihar7030
@tusharpadihar7030 4 жыл бұрын
You are a genius ❤️
@sharuk3545
@sharuk3545 3 жыл бұрын
Awesome solution
@yashwantkumar4998
@yashwantkumar4998 4 жыл бұрын
you are superb bro !
@ZhouHaibo
@ZhouHaibo 3 жыл бұрын
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; } ```
@dinamohamed13600
@dinamohamed13600 Жыл бұрын
very helpful thanks
@suprathikm3639
@suprathikm3639 3 жыл бұрын
awesome Nick
@AshishKumar-dn6jc
@AshishKumar-dn6jc 2 жыл бұрын
Thanks man!
@aravinds6406
@aravinds6406 10 ай бұрын
Well explained
@harikrishnak721
@harikrishnak721 4 жыл бұрын
Thanks nick
@tuannguyentranle7151
@tuannguyentranle7151 4 жыл бұрын
So fancy ;))) thanks a lot
@yashspr
@yashspr 4 жыл бұрын
Simple and elegant explanation! Amazing man
@lifeofme3172
@lifeofme3172 4 жыл бұрын
Awesome video
@prathamchitransh5338
@prathamchitransh5338 2 жыл бұрын
Best Solution for this problem.
@farzanehahmadi9410
@farzanehahmadi9410 3 жыл бұрын
you rock bro!
@free-palestine000
@free-palestine000 4 жыл бұрын
nick white >>>>
@anmolverma075
@anmolverma075 Жыл бұрын
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?
@vaibhavjain4710
@vaibhavjain4710 4 жыл бұрын
I have done using recrusive solution but got me error . Thanks for iterative version of the problem.
@abhishekkumarsinghA
@abhishekkumarsinghA 2 жыл бұрын
awesome
@somyasrivastava6315
@somyasrivastava6315 2 жыл бұрын
you are Amazing
@akshaybhosale2724
@akshaybhosale2724 2 жыл бұрын
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.
@shubhamuniyal2417
@shubhamuniyal2417 4 жыл бұрын
Smooothhhh!!!!
@rupaldesai7098
@rupaldesai7098 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
@@NickWhite Got it! Thanks
@somyasinha6293
@somyasinha6293 Жыл бұрын
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;
@StayPuft787
@StayPuft787 2 жыл бұрын
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
@yahwehagape
@yahwehagape 4 жыл бұрын
Is it bad practice to rely on int casting to take the floor?
@hritwiksom3032
@hritwiksom3032 3 жыл бұрын
This is implicit casting so I don't see why it would be.
@visheshsahu-yn8wz
@visheshsahu-yn8wz Жыл бұрын
big fan bro
@benjaminmalley5719
@benjaminmalley5719 4 жыл бұрын
Did you consider binary search for this problem?
@siobhanahbois
@siobhanahbois 3 жыл бұрын
🤔
@akshatshah3013
@akshatshah3013 4 жыл бұрын
Why cant we use the indexOf() and lastIndex() methods and store them in result?
@hritwiksom3032
@hritwiksom3032 3 жыл бұрын
We can but in an interview, the interviewer won't be happy with it or ask for the logic anyway
@rubyjiang8836
@rubyjiang8836 2 жыл бұрын
so smart
@ahmetozdemir2207
@ahmetozdemir2207 4 жыл бұрын
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.
@nhht77
@nhht77 4 жыл бұрын
Somehow, I tried the same method in Javascript but it didn't work. It works well on Java.
@aman4434
@aman4434 3 жыл бұрын
Because mid in javascript will give decimal values on dividing by 2! Just tried myself and found out :)
@svalyavasvalyava9867
@svalyavasvalyava9867 3 жыл бұрын
Can, please, someone explain why start + (end - start) / 2 is preferrable to (start + end) / 2 Thanks in advance.
@neloangelo172
@neloangelo172 3 жыл бұрын
Use the first way to avoid integer overflow
@svalyavasvalyava9867
@svalyavasvalyava9867 3 жыл бұрын
@@neloangelo172 thanks a lot, got it
@fulinaround
@fulinaround 4 жыл бұрын
Instead of combing through the discussion boards I check your channel first, leetcode solution , and discussion board last.
@ethanhuang2127
@ethanhuang2127 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
Of course you could check is first and last element are the same before running the algorithm.
@jashbhatia3948
@jashbhatia3948 3 жыл бұрын
Question: Why not just find the left most index and then traverse through the array till we keep finding duplicates?
@fhantom784
@fhantom784 3 жыл бұрын
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.
@adjmonkey
@adjmonkey 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
That would be linear time complexity. Imagine having an array of same number repeating n times.
@thesuburbanerrorist9727
@thesuburbanerrorist9727 3 жыл бұрын
Dude you are like my hero and shit.
@a4ankit27
@a4ankit27 4 жыл бұрын
Why does this code return -1, -1 for me ? Any guesses , what i might me missing ?
@a4ankit27
@a4ankit27 4 жыл бұрын
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 4 жыл бұрын
@@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.
@NickKravitz
@NickKravitz 4 жыл бұрын
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.
@RawBert
@RawBert 3 жыл бұрын
there’s a better way, get index of first, then with that index look at how long it goes
@chillu420
@chillu420 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
@kingthunder9787
@kingthunder9787 4 жыл бұрын
Hi
@amansayer4943
@amansayer4943 Жыл бұрын
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 4 жыл бұрын
Binary Search. Binary Search. Binary Search.
@dushyantjakhar1716
@dushyantjakhar1716 3 жыл бұрын
Everything is good but sound is not balance
@RaymondLo84
@RaymondLo84 4 жыл бұрын
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...
@TheBestNameEverMade
@TheBestNameEverMade 3 жыл бұрын
You don't need 2 binary searches.
@hritwiksom3032
@hritwiksom3032 3 жыл бұрын
You mean you don't need 2 functions, two searches are obviously needed.
@TheBestNameEverMade
@TheBestNameEverMade 3 жыл бұрын
@@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.
Google Coding Interview Question - firstDuplicate
20:17
Nick White
Рет қаралды 240 М.
Jumping off balcony pulls her tooth! 🫣🦷
01:00
Justin Flom
Рет қаралды 28 МЛН
I'm Excited To see If Kelly Can Meet This Challenge!
00:16
Mini Katana
Рет қаралды 30 МЛН
ЧУТЬ НЕ УТОНУЛ #shorts
00:27
Паша Осадчий
Рет қаралды 10 МЛН
BS-6. Minimum in Rotated Sorted Array
17:08
take U forward
Рет қаралды 147 М.
Facebook Coding Interview Question - sortedSquaredArray
12:46
Nick White
Рет қаралды 193 М.
Find Peak Element - Leetcode 162 - Python
11:02
NeetCodeIO
Рет қаралды 36 М.
My Brain after 569 Leetcode Problems
7:50
NeetCode
Рет қаралды 2,5 МЛН
LeetCode Flipping an Image Solution Explained - Java
6:52
Nick White
Рет қаралды 7 М.
Fast Inverse Square Root - A Quake III Algorithm
20:08
Nemean
Рет қаралды 5 МЛН
What is a Monad? - Computerphile
21:50
Computerphile
Рет қаралды 598 М.
Новые iPhone 16 и 16 Pro Max
0:42
Romancev768
Рет қаралды 2,4 МЛН
КРУТОЙ ТЕЛЕФОН
0:16
KINO KAIF
Рет қаралды 7 МЛН
Rate This Smartphone Cooler Set-up ⭐
0:10
Shakeuptech
Рет қаралды 7 МЛН