Jump Game II - Greedy - Leetcode 45 - Python

  Рет қаралды 195,230

NeetCode

NeetCode

Күн бұрын

Пікірлер: 213
@NeetCode
@NeetCode 3 жыл бұрын
🚀 neetcode.io/ - I created a FREE site to make interview prep a lot easier, hope it helps! ❤
@dineshkumarkb1372
@dineshkumarkb1372 Жыл бұрын
All your videos are a treasure . Every single one is worth rewatching during interviews. Never ever delete these videos or stop uploading new ones.
@naive-fleek7420
@naive-fleek7420 9 ай бұрын
during interviews??
@dineshkumarkb1372
@dineshkumarkb1372 9 ай бұрын
@@naive-fleek7420 I meant during prep for interviews. It’s implied dude.
@allen724
@allen724 3 жыл бұрын
This is a great explanation. I like this method better than LeetCode's published solution! It is more intuitive for me. Thanks and keep up these videos.
@lakshmanprabhu6722
@lakshmanprabhu6722 Жыл бұрын
Same here!. Went through a lot of solutions, but this is just gold.
@ghdshds1899
@ghdshds1899 10 күн бұрын
this explanation was actually dog
@matthewtang1490
@matthewtang1490 3 жыл бұрын
Please don't stop making videos :) I just binged your DP playlist in 2 days
@NeetCode
@NeetCode 3 жыл бұрын
Wow, I bet you would nail any interview now! Thanks for the kind words
@crimsonghoul8983
@crimsonghoul8983 5 ай бұрын
2 DAYS????
@aniketyadav6247
@aniketyadav6247 Жыл бұрын
The below code also works : 1.) Traverse the entire nums array. On each i-th iteration, update the farthest_jump to the max of current value of farthest_jump and i + nums[i] 2.) If i is equal to the current jump we have completed the current jump and can now prepare to take the next jump (if required). So we increment the jump by 1 and set curr_jump to farthest jump. 3.) If that's not the case then do not update the jumps variable and the curr_jump variable since we haven't yet completed the current jump. 4.) In the end of the traversal you will get the minimum jumps. Hope this helps :) def jump(self, nums: List[int]) -> int: farthest_jump = 0 jump = 0 curr_jump = 0 for i in range(len(nums)-1): # Find the Farthest Jump farthest_jump = max(farthest_jump, i + nums[i]) # it means we have made the jump if i == curr_jump: # Point curr jump to the farthest jump curr_jump = farthest_jump jump += 1 return jump
@venkateshnaidu2133
@venkateshnaidu2133 2 жыл бұрын
Amazing solution, loved it! Here is a minor tweak to handle an edge case (no possible path) int minJumps(int arr[], int n){ // Your code here int l=0, r=0; int jumps = 0; while(r < n-1) { int farthest = 0; for(int i = l; i r) return -1; jumps++; } return jumps; }
@akshatsamdani
@akshatsamdani Жыл бұрын
Thanks for posting this. I was thinking about the same
@PorkBoy69
@PorkBoy69 5 ай бұрын
The test cases are generated such that you can reach nums[n - 1].
@PRAVEENKUMAR-fi1wu
@PRAVEENKUMAR-fi1wu 2 ай бұрын
No need to do this. It is said in question. "We can always reach to the end" ​@@akshatsamdani
@acala127
@acala127 3 жыл бұрын
This is the most elegant and clear explanation I have seen for this problem. Thank you!
@karthikinamanamelluri7208
@karthikinamanamelluri7208 10 ай бұрын
Great explanation!! Even after this I was confused why the while condition is r < len(nums)-1, and not r < len(nums). I thought why can't we can change it to r < len(nums), and return res-1. This explains the algorithm better, since the result we are finding from the loop is the no. of blocks, and the no. of jumps is one less than no. of blocks. But this solution is not working for all the cases.
@prashantgupta6160
@prashantgupta6160 3 жыл бұрын
please continue this series, you are born to teach coding to other people.
@heroicrhythms8302
@heroicrhythms8302 Жыл бұрын
if we come to the middle of the array and can't reach the end anymore, that means we have encountered a 'zero'. then we should return -1. implement a check saying (if l>r: return -1)
@licokr
@licokr Жыл бұрын
Crazy. This channel explains coding solutions in the easiest way. It saves my life.
@ng.manisha
@ng.manisha 9 ай бұрын
You are literally a savior! I have my google interview lined up soon and all your videos actually teach me tricks how to think when faced with a problem!
@iamnoob7593
@iamnoob7593 Ай бұрын
did u make it into Google?
@protyaybanerjee5051
@protyaybanerjee5051 3 жыл бұрын
Man, we need more videos. Great production quality :)
@ma_sundermeyer
@ma_sundermeyer Жыл бұрын
Nice simplification of the BFS.. I had a similar idea but stayed with the conventional deque implementation: q = deque([(0,0)]) max_i = 1 while q: i,num_j = q.popleft() if i >= len(nums) - 1: return num_j for j in range(max_i, nums[i] + i + 1): q.append((j, num_j+1)) max_i = max(max_i, nums[i] + i + 1)
@soumyajitganguly2593
@soumyajitganguly2593 9 күн бұрын
Great explanation man. Easy to generalize when jumping to last value is not possible.
@denshaSai
@denshaSai 2 жыл бұрын
whats the reason that it is "while r < len(nums) - 1:" not just "while r < len(nums) :"?
@arunavbhattacharya3353
@arunavbhattacharya3353 2 жыл бұрын
I fail to intuitively understand why do we need to iterate till n-1 instead of n
@eternalmeme7920
@eternalmeme7920 2 жыл бұрын
@@arunavbhattacharya3353 It's because, 1) All no. are positive, therefore if we touch the n-2 element, i.e. r=n-2, then we are iterating from l to r(inclusive), if we iterate at r=n-2, then since all no. positive, farthest will definitely be greater than >=n-1, therefore r
@visase2036
@visase2036 2 жыл бұрын
One of the main reasons for this is , Since we are accounting the 1st jump at position 0 , we are not considering the last element to calculate the answer ie [2,3,1,1,4] We re incrementing ans+1 by taking 2 into account , which is not necessary if you work logically and since we are accounting that as one jump we are ignoring the last element!
@pruthvirajpatil7798
@pruthvirajpatil7798 Жыл бұрын
Simple - Because if r is at len(nums)-1, we would have achieved the goal. No need to proceed ahead.
@megavoltism
@megavoltism 2 жыл бұрын
It's funny how he always colors-in his arrow heads Anyway, really cool insight about BFS!
@ge_song5
@ge_song5 7 ай бұрын
question: why do we have to stop by the last_index - 1? while r < len(nums) - 1:
@ssvivek4
@ssvivek4 8 ай бұрын
I don't think if I'll ever see a better explanation to this problem. Kudos man!
@ekanshsharma1309
@ekanshsharma1309 Жыл бұрын
why we write r < nums.size() - 1..... not just r< nums.size()??
@RiteshThakur-o6r
@RiteshThakur-o6r 3 ай бұрын
Because if r is at nums.size, then it has to terminate because it has reached the final index.
@pranavmaiya4386
@pranavmaiya4386 26 күн бұрын
hey did you get placed?
@sniper324
@sniper324 3 жыл бұрын
Your videos and explanations are some of the best on KZbin, really great stuff man, keep it up!
@adityagoyal4299
@adityagoyal4299 6 ай бұрын
The content of this channel is priceless. Been binge watching your videos
@darkexodus6404
@darkexodus6404 Жыл бұрын
Your explanation is too good! Understood it clearly.
@loia5tqd001
@loia5tqd001 2 ай бұрын
9:28 Why while r < len(nums) - 1 not while r < len(nums) ?
@abibhavankumar2522
@abibhavankumar2522 Ай бұрын
The array positions starts from 0 to length of array - 1. If you go till len(nums) then you will be considering an extra element that is not present in the array. Hope that clears your doubt!
@divyanshkhetan
@divyanshkhetan Жыл бұрын
This is a great approach. I especially liked how you related it to the concept of BFS. It helped in visualizing the approach so much!
@ahmad3823
@ahmad3823 3 жыл бұрын
I am new to serious coding but great job! this took me some time and now way close to this neatness level!
@akshatgupta107
@akshatgupta107 3 жыл бұрын
Please please man, I love your channel so much, you have never disappointed me. Make a list of important greedy problems please
@kashishsharma6809
@kashishsharma6809 2 жыл бұрын
Oh man I unnecessarily used queue like in bfs. 🤧 I implemented exact bfs to find hops.. But using the interval instead of queue was awesome 😎
@commandernorton88
@commandernorton88 2 жыл бұрын
Drinking game: take a sip when he says "Right?"
@bahaaiman8588
@bahaaiman8588 3 жыл бұрын
This is the only one that I understood. Thanks a ton !
@NeetCode
@NeetCode 3 жыл бұрын
Happy to help!
@sagarnair9021
@sagarnair9021 2 жыл бұрын
one line should be added after updating j i.e if j
@yathartharana7956
@yathartharana7956 Жыл бұрын
Searching the whole day and find this solution the best one 🙌🏼
@sauravchandra10
@sauravchandra10 17 күн бұрын
Loved the analogy to BFS.
@stith_pragya
@stith_pragya 11 ай бұрын
Thank You So Much for this wonderful video................🙏🙏🙏🙏🙏🙏
@Gnaneshh
@Gnaneshh 3 жыл бұрын
One hell of an explanation ! Thank you
@arunraj2527
@arunraj2527 2 жыл бұрын
I love his patience and way of talking through the problem.
@VarunMittal-viralmutant
@VarunMittal-viralmutant 2 жыл бұрын
The standard solution for this question is like the LIS variant which is O(N**2). And that gives TLE on LeetCode I think the solution described above works only when it is guaranteed that the end can be reached, else it fails. Correct ? Modified to take care of unreachable cases: def find_shortest_jump_path(jumps): l, r = 0, 0 i = 0 res = 0 while l = len(jumps)-1 else -1
@God0fSloth
@God0fSloth 7 ай бұрын
Thank you very much! Your code solved my problem. But what's the variable ( i ) used for? why are we increasing it?
@VarunMittal-viralmutant
@VarunMittal-viralmutant 7 ай бұрын
@@God0fSloth That looks like some junk code, not used in final solution :)
@venkatsaireddy1412
@venkatsaireddy1412 9 ай бұрын
why left is re-initialised with only right +1, it can be moved to more than right +1?
@user-pn9sr2rq3z
@user-pn9sr2rq3z 6 ай бұрын
great explanation and video! Espcially coloring. Unfortuntatelly does not work on leetcode any longer , giving timeout exceeded error.
@chandrachurmukherjeejucse5816
@chandrachurmukherjeejucse5816 7 ай бұрын
Your explanation and drawing is just awesome.
@dennisg3683
@dennisg3683 6 ай бұрын
Why does the first time iterating through the array the for loop starts at 0 and goes to just the first index (0 + 1)?
@meghaldarji598
@meghaldarji598 3 жыл бұрын
The best solution there is for this problem. I am saying after watching all other videos on this problem.🙌🙌
@vincenttung-or3ns
@vincenttung-or3ns 10 күн бұрын
This is freaking genius!
@rohanb9512
@rohanb9512 2 жыл бұрын
Nicely explained the intuition. Exactly wat i was looing for. Probably the best explanation in YT
@ohmegatech666
@ohmegatech666 6 ай бұрын
Just want to clarify that this is still a dynamic programming solution. That's because this solution is a moving window algorithm which are examples of dynamic programming. That is because they involve breaking the problem down into sub-problems and finding an optimal answer to those sub-problems, thus finding the optimal answer to the main problem. In this case the main problem is optimizing the fewest jumps to get to the end. The smaller sub-problem is finding the max jump within the current window.
@themagickalmagickman
@themagickalmagickman Жыл бұрын
I used a Dijkstra's approach to solve the problem, but this is a simpler and quicker answer... wow.
@PrathamMittal-t8m
@PrathamMittal-t8m Жыл бұрын
Best channel for explaining the leetcode problems to a dumbo like me
@tobito__
@tobito__ 3 жыл бұрын
How is this solution a O(n)? Isnt there a for loop inside a while loop which makes it a O(n^2)?
@abhinav-lq9ms
@abhinav-lq9ms Ай бұрын
I think it's O(n) since we are always updating l to be r+1, so it won't again traverse the same value
@krishnavamsichinnapareddy
@krishnavamsichinnapareddy 2 жыл бұрын
You simply nailed it. Love from India ♥️
@hwang1607
@hwang1607 5 ай бұрын
how would you come up with this in an interview, I could come up with the DP solution, but its n^2 complexity
@pixelbyteee
@pixelbyteee 3 ай бұрын
isn't this a O ( n^2 ) solution? as there are two loops? ( u mentioned it is an O ( n ) earlier )
@697Alok
@697Alok 3 жыл бұрын
What an explanation. Loved it :)
@kevintran6102
@kevintran6102 2 жыл бұрын
This explanation is crystal clear. Thank you!
@MrExamer
@MrExamer 2 жыл бұрын
great explanation on the BFS mind behind the problem
@aravinda1595
@aravinda1595 Жыл бұрын
You are so good I just need to watch the explanation part and boom ! i can write my own code
@amarrajeev2903
@amarrajeev2903 Жыл бұрын
I think the edge cases also must be handled in the code. Suppose if the Algorithm could not find the minJumps it should return -1 as such. Thoughts on this?
@markolainovic
@markolainovic Жыл бұрын
No need, in the description it says that the solution existence is guaranteed.
@kewtomrao
@kewtomrao 2 жыл бұрын
Awesome explanation!! I did the regualr BFS and got stuck in a MLE error. Now i know my mistakes.
@xinniu3145
@xinniu3145 2 жыл бұрын
Thank you for sharing. We can put farthest=0 before the while loop right?
@shantanukumar4081
@shantanukumar4081 2 жыл бұрын
Great Explanation !!!
@ardhidattatreyavarma5337
@ardhidattatreyavarma5337 7 ай бұрын
what a beautiful piece of code
@shashijais789
@shashijais789 2 жыл бұрын
Again Superb solution, which I was looking for! Thanks for this explanation.
@huatsai43
@huatsai43 3 жыл бұрын
Thank you for the clear drawing explanation!
@NeetCode
@NeetCode 3 жыл бұрын
Thanks, happy it was helpful 🙂
@VY-zt3ph
@VY-zt3ph Жыл бұрын
Hello Neet!! You didn't mention the time coplexity here. Can uou please explain what was the time complexity? It seems it is n2 because of two nested loops. But I am still not sure.
@111Apurva
@111Apurva 11 ай бұрын
it's not n2 it is O(n) after calculating farthest you are not considering the element again (starting from r+1), In worst case of all 1's it would still go just once over each element
@aishwaryaranghar3385
@aishwaryaranghar3385 3 жыл бұрын
i tried this code but it somehow throws tle. would be glad if you let me know a little updation in the code. thanks
@sauravsingh7157
@sauravsingh7157 3 жыл бұрын
It's giving TLE because this code goes in infinite loop in cases where we can't reach the end of the array. Ex- 1 2 0 0 6 7 - for this test case loop will never break. Here is a working code : def minJumps(self, arr, n): res = 0 l= r = 0 flag = 0 while r < len(arr) -1: farthest = 0 for i in range(l,r+1): farthest = max(farthest,i + arr[i]) l=r+1 r= farthest if l > r: flag =1 break res+=1 if flag ==1: return -1 return res
@shantanushende6
@shantanushende6 3 жыл бұрын
really really good! Felt like one comment did not do justice to the level of simplicity!
@vishalmishra7018
@vishalmishra7018 3 жыл бұрын
Really neat code! Nicely done and explained.
@Cld136
@Cld136 3 жыл бұрын
Excellent explanation. Much Thanks!
@rabbyhossain6150
@rabbyhossain6150 10 ай бұрын
Memory Complexity: O(n) class Solution: def jump(self, nums: List[int]) -> int: steps = 0 visited, q = set(), collections.deque() q.append(0) visited.add(0) while q: length = len(q) for _ in range(length): idx = q.popleft() if idx == len(nums) - 1: return steps for pos in range(1, nums[idx] + 1): if (idx + pos) not in visited: q.append(idx + pos) visited.add(idx + pos) steps += 1
@rohands9195
@rohands9195 Ай бұрын
Why is the time complexity of DP step = O(n^2)?
@supervince110
@supervince110 2 жыл бұрын
You always have the simplest solution!
@Kushagra_21
@Kushagra_21 2 жыл бұрын
one of the best solution in internet for this question. Thanks a lot!!
@ankurtiwari5664
@ankurtiwari5664 2 жыл бұрын
i don't know python still i watch all ur videos Next level explanation of every approach
@venkatrampramod7978
@venkatrampramod7978 Жыл бұрын
Your solutions are absolutely brilliant. I love the way you break down the solution with diagrams.
@gokulnaathbaskar9808
@gokulnaathbaskar9808 2 жыл бұрын
Nice, looking at BFS for the first time in an array.
@francescosacripante1661
@francescosacripante1661 Жыл бұрын
Correct me if I'm wrong, but couldn't we solve it by using Dijkstra algorithm? I mean we could create a graph and with this search for the shortest path to the end
@shreshtashetty2985
@shreshtashetty2985 2 жыл бұрын
Nice solution, but how do you come up with this in an interview? In general, how do you tackle a greedy-solution problem?
@darshansimha2166
@darshansimha2166 2 жыл бұрын
Nice video, I understand the solution. But I am having a tough time understanding the complexity for an array of all 1's wont the for loop inside run for every iteration in the array, so won't that make it O(n^2)?
@divyasri9432
@divyasri9432 2 жыл бұрын
I have got the same doubt forloop inside while loop will give time complexity O(n^2) how does this become optimal solution?
@bmusuko
@bmusuko 2 жыл бұрын
​@@divyasri9432 I think the key here, we shift the left pointer to r+1 so we only inspect each element in the array once, it means it is o(n)
@minhthinhhuynhle9103
@minhthinhhuynhle9103 2 жыл бұрын
2 loops doesn't mean O(N^2)
@user-2802cvsfkj
@user-2802cvsfkj Жыл бұрын
this is nuts dawg, who allowed this to exist. im literally shaking and crying rn, wtf.
@amrutaparab4939
@amrutaparab4939 5 ай бұрын
Thank god for you!
@DivyaSingh-bl4cj
@DivyaSingh-bl4cj 2 жыл бұрын
Best explanation channels for python.
@amanshaukat1105
@amanshaukat1105 2 жыл бұрын
This is a great explanation. Very intuative. lets say it is not guaranteed that answer will exist, and we have to return -1 in such case. How could we handle this. Please help.
@allwell8570
@allwell8570 9 ай бұрын
You simplified it!! Thanks
@algorithmo134
@algorithmo134 3 жыл бұрын
@NeetCode Can we use a heap to find the maximum steps we can jump instead of looping over all the number of steps we can take and then finding the maximum?
@oogieboogie7028
@oogieboogie7028 Жыл бұрын
TC of heap is n.logn. This approach is O(n)
@thevagabond85yt
@thevagabond85yt Жыл бұрын
I programmed by modifying Greedy Approach of Jump Game(I) : ``` class Solution { public int jump(int[] nums) { int N= nums.length, goal= N-1, jumpCount= 0; while(goal >0) { for(int i=0; i= goal) { goal= i; jumpCount++; break; } // if }//for }//while return jumpCount; } } ```
@yashjain1011
@yashjain1011 Жыл бұрын
such a nice explanation. This video was so great. You earned a subscriber.
@avishekarora
@avishekarora 2 жыл бұрын
Best Solution explaination, thanks
@emekaobasi4765
@emekaobasi4765 Жыл бұрын
why till len(nums)-1, shouldn't it be len(nums) ?
@peng943
@peng943 10 ай бұрын
I don't get it neither... starting to hate myself when I can't understand something people don't think it is worthy to explain...
@dent1808
@dent1808 2 жыл бұрын
clearest explanation ever
@trantung2013
@trantung2013 3 жыл бұрын
Really elegant solution.
@gulershad4375
@gulershad4375 2 жыл бұрын
def jump(nums): jump = 0 farthest = float('-inf') end = 0 for i in range(len(nums)): farthest = max(farthest, nums[i]) + 1 if i == end and i != len(nums) - 1: jump += 1 end = farthest return jump
@sunshine-mc2oi
@sunshine-mc2oi 2 жыл бұрын
Thank you for the awesome video. It's super easy to understand. Is there any chance you can make a video about 1326. Minimum Number of Taps to Open to Water a Garden and Video Stitching, they seem relevant to this topic. Thank you so much.
@TheLaidia
@TheLaidia 3 жыл бұрын
very clear explanation. Thank you!!
@alonalon8794
@alonalon8794 2 жыл бұрын
at the end of the algorithm r might point to an index which is lesser than the last index?
@anupamdubey5736
@anupamdubey5736 2 жыл бұрын
Best Explanation! Thanks
@vasumahalingam5162
@vasumahalingam5162 9 ай бұрын
brilliant but I wouldnt be able to solve this by myself in a coding interview. Very clever indeed.
@LeCharles-bw4wp
@LeCharles-bw4wp 9 ай бұрын
Thanks.But I suppose the time should be O(n squares)
@MsSkip60
@MsSkip60 3 жыл бұрын
Awesome content as usual :)
@yifeicheng9102
@yifeicheng9102 2 ай бұрын
what's the time complexity of this solution?
@swathiayas
@swathiayas 3 жыл бұрын
Really good videos! Been watching alot of your videos lately! Thank you making such awesome videos!
@adwaitkesharwani3569
@adwaitkesharwani3569 2 жыл бұрын
Excellent explanation!!
Unique Paths - Dynamic Programming - Leetcode 62
10:48
NeetCode
Рет қаралды 129 М.
Jump Game - Greedy - Leetcode 55
16:28
NeetCode
Рет қаралды 240 М.
💩Поу и Поулина ☠️МОЧАТ 😖Хмурых Тварей?!
00:34
Ной Анимация
Рет қаралды 1,8 МЛН
АЗАРТНИК 4 |СЕЗОН 2 Серия
31:45
Inter Production
Рет қаралды 1,1 МЛН
Поветкин заставил себя уважать!
01:00
МИНУС БАЛЛ
Рет қаралды 6 МЛН
How To Get Married:   #short
00:22
Jin and Hattie
Рет қаралды 17 МЛН
L5. Jump Game - II | Greedy Algorithm Playlist
16:45
take U forward
Рет қаралды 50 М.
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 537 М.
5 Good Python Habits
17:35
Indently
Рет қаралды 537 М.
Is Computer Science still worth it?
20:08
NeetCodeIO
Рет қаралды 272 М.
LeetCode was HARD until I Learned these 15 Patterns
13:00
Ashish Pratap Singh
Рет қаралды 351 М.
8 patterns to solve 80% Leetcode problems
7:30
Sahil & Sarra
Рет қаралды 369 М.
How to Solve ANY LeetCode Problem (Step-by-Step)
12:37
Codebagel
Рет қаралды 226 М.
Coin Change - Dynamic Programming Bottom Up - Leetcode 322
19:23
Spiral Matrix - Microsoft Interview Question - Leetcode 54
16:46
💩Поу и Поулина ☠️МОЧАТ 😖Хмурых Тварей?!
00:34
Ной Анимация
Рет қаралды 1,8 МЛН