Bellman-Ford - Cheapest Flights within K Stops - Leetcode 787 - Python

  Рет қаралды 90,795

NeetCode

NeetCode

Күн бұрын

🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🐦 Twitter: / neetcode1
🥷 Discord: / discord
🐮 Support the channel: / neetcode
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
💡 CODING SOLUTIONS: • Coding Interview Solut...
💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
🌲 TREE PLAYLIST: • Invert Binary Tree - D...
💡 GRAPH PLAYLIST: • Course Schedule - Grap...
💡 BACKTRACKING PLAYLIST: • Word Search - Backtrac...
💡 LINKED LIST PLAYLIST: • Reverse Linked List - ...
💡 BINARY SEARCH PLAYLIST: • Binary Search
📚 STACK PLAYLIST: • Stack Problems
Problem Link: neetcode.io/problems/cheapest...
0:00 - Read the problem
3:55 - Drawing Explanation
15:28 - Coding Explanation
leetcode 787
This question was identified as an interview question from here: github.com/xizhengszhang/Leet...
#bellman #ford #python
Disclosure: Some of the links above may be affiliate links, from which I may earn a small commission.

Пікірлер: 121
@NeetCode
@NeetCode 2 жыл бұрын
💡 GRAPH PLAYLIST: kzbin.info/www/bejne/e5isZqGLbsqnpLc
@code_school6946
@code_school6946 2 жыл бұрын
hey neetcode please solve problems from love babbar's 450 dsa sheet as well. Rest love your explanation
@jonaskhanwald566
@jonaskhanwald566 2 жыл бұрын
Hey neetcode! Today I got intern offer from one of the FAANG companies. All credits to you for introducing me leetcode and easy python solutions. That really helped me in interviews. Thank you so much.
@NeetCode
@NeetCode 2 жыл бұрын
Hey Jonas, congrats on the offer!!! I'm glad your hard work paid off!
@jonaskhanwald566
@jonaskhanwald566 2 жыл бұрын
@@NeetCode Thanks again. never stop posting videos
@prempeacefulchannel
@prempeacefulchannel 2 жыл бұрын
Congratulations Jonas!
@pritz9
@pritz9 Жыл бұрын
But I dont think u were able to solve the mysteries between the knot and the two worlds without Claudia Tiedimann ! Give a thanks to her too :-) ... Iykyk 😂
@man8918
@man8918 11 ай бұрын
w name
@kickradar3348
@kickradar3348 2 жыл бұрын
I think my study plan is to go through your list of videos and see which problems scare me, and tick them off one by one. because it's so relaxing to know that you have a solution.
@gaaligadu148
@gaaligadu148 2 жыл бұрын
There's no way in hell I would've been able to solve this in an interview. I think it's LC hard. Not only it's an advanced graph algorithm but also it's a variation of bellman ford.
@NeetCode
@NeetCode 2 жыл бұрын
Agree, this one is really hard.
@symbol767
@symbol767 2 жыл бұрын
Yeah this is very difficult
@chaitya6643
@chaitya6643 5 ай бұрын
This is the first time I did not understand something you taught @NeetCode
@supermario3042
@supermario3042 2 жыл бұрын
Your solution is constantly the most readable and elegant one! Really appreciate all your efforts!
@rahulpandey3815
@rahulpandey3815 2 жыл бұрын
Thanks for the explanation man! You pointed out what each of the prices and temp array means and made the algorithm very intuitive
@andreyvalverde4780
@andreyvalverde4780 2 жыл бұрын
can you please further explain me why we need a temp array?
@nashifcod
@nashifcod 2 жыл бұрын
This channel is so underrated, NeetCode fr the GOAT
@rameshjha2264
@rameshjha2264 2 жыл бұрын
Explanation for 'k+1' : if k stops are allowed , then only vertices that are of use are 'k' + 'src' + 'dst' == k+2 , therefore maximum routes to dst can be (k+2)-1.
@GoogleAccount-wy2hc
@GoogleAccount-wy2hc Жыл бұрын
Awesome explanation. For my understanding it was easier when I named "prices" "prevStepPrices" and "tempPrices" "currentStepPrices", that way it's clear why we're using a temp variable.
@kritidiptoghosh4272
@kritidiptoghosh4272 2 жыл бұрын
i really like the use of temp array to limit to k stops ,regular BF doesnt take care of that
@pchaitanya9935
@pchaitanya9935 2 жыл бұрын
I loved your videos, pls continue posting more topics. I love the way you teach.
@willy2184
@willy2184 5 ай бұрын
Thank you, I have an interview for a MAANG company next week and I feel confident with the help of your videos!
@thelasttimeibreathedwas4468
@thelasttimeibreathedwas4468 2 жыл бұрын
Mind Blowing approach, Thanks Man
@aryanyadav3926
@aryanyadav3926 2 жыл бұрын
Thanks for the neat explanation and code!
@arijitdey8419
@arijitdey8419 Жыл бұрын
superb explanation..specially the temporary array part,thanks a lot!!!
@MP-ny3ep
@MP-ny3ep Жыл бұрын
Phenomenal explanation. Thank you so much !!!
@somdutroy
@somdutroy 2 жыл бұрын
Do let me know if I am correct here. The explanation is that Bellman Ford converges with |V|-1 tries because it gets to traverse all the routes including the route that has |V|-2 vertices between vertices at two extremes is the graph. So, with K vertices in between, we run K+1 passes.
@konradpijanowski2369
@konradpijanowski2369 2 жыл бұрын
Just a technicality, but isn't this approach O(k*(V+E)), since we are copying the temp_cost array at each iteration?
@yashwanthgowda1517
@yashwanthgowda1517 Ай бұрын
Great explanation, Thank you so much !❤
@CostaKazistov
@CostaKazistov Жыл бұрын
Dijkstra is normally pronounced Dyke-struh, in IPA /ˈdɑɪkstɹə/. It is a Dutch name, where the 'j' is always silent or pronounced like a 'y'. So the name should be 'dyk (bike, hike in English) -stra'.
@wernerheisenberg9653
@wernerheisenberg9653 Жыл бұрын
If you ever feel useless remember there is a 'j' in Dijkstra 😑
@pepehimovic3135
@pepehimovic3135 8 ай бұрын
@@wernerheisenberg9653It’s just how Dutch and some similar languages work. e.g. Virgil van Dijk. Rijkaard.
@PippyPappyPatterson
@PippyPappyPatterson 2 жыл бұрын
Does anyone know why we use the `tmp` array? Other implementations of Bellman-Ford online don't use it.
@marcelofernandes3230
@marcelofernandes3230 2 жыл бұрын
One easy way to make it more efficient is to check if there is an improvement between iterations, and break out of the loop if there isn't. So replacing line 14 for: if prices != tmpPrices: prices = tmpPrices else: break
@yadwindersingh806
@yadwindersingh806 4 күн бұрын
Wow. That's nice of a catch.
@guambomber448
@guambomber448 Жыл бұрын
Since there are no negative weights I chose to use Djikstras algorithm. It was nice seeing this solution too!
@CyborgT800
@CyborgT800 2 жыл бұрын
Does it also mean this code should work for a scenario with at least K stops and can you specify a recursion for this?
@amrutaparab4939
@amrutaparab4939 5 ай бұрын
You are just tooo tooo good thankyou!
@prempeacefulchannel
@prempeacefulchannel 2 жыл бұрын
Thanks for the vid 👌
@asdfasyakitori8514
@asdfasyakitori8514 8 ай бұрын
Great video!
@utsavmathur1478
@utsavmathur1478 2 жыл бұрын
Thanks for another great video!! Idk why but I somehow find the general DFS solution easier to understand & implement. The DFS solution is like any other graph search problem, but yes it's much bulkier than this algorithm.
@halahmilksheikh
@halahmilksheikh 2 жыл бұрын
Same. However one problem with a DFS is that I get a TLE with 48/51 cases on leetcode with javascript
@halahmilksheikh
@halahmilksheikh 2 жыл бұрын
My conclusion is that they really want you to use Bellman-Ford for this problem. Some hints are that it gives you the number of nodes n and the list of edges. If use DFS you don't need n and you have to generate an adjacency list. The question is really built around B-F.
@PippyPappyPatterson
@PippyPappyPatterson 2 жыл бұрын
@@halahmilksheikh good thoughts, thank you.
@soumyajitganguly2593
@soumyajitganguly2593 2 жыл бұрын
@@halahmilksheikh I made DFS work with memoization. But then it became more of a DP solution than vanilla DFS.
@guambomber448
@guambomber448 Жыл бұрын
Since there are no negative costs I just use Djikstras algorithm to solve this
@BrandonHo
@BrandonHo Жыл бұрын
quick question -- at 11:30 to 11:50 when evaluating whether the price of B should be updated, would it make more sense in your drawing to look at B's price in the temp table, since in more complex graphs there could be multiple potential updates to B when looking at the next 'layer' of BFS and we want to ensure we're saving the minimum price?
@kathirchidhambarapandy929
@kathirchidhambarapandy929 6 ай бұрын
That's why we are checking all edges at every level
@soumyajitganguly2593
@soumyajitganguly2593 2 жыл бұрын
This is a very simple example, you could have picked one with cycles... Also the time complexity would be O ( k * (V+E) ) . The extra V is due to the copy of temp.
@abhinav54555
@abhinav54555 5 ай бұрын
Very good explanation
@YashSingh-ts8yk
@YashSingh-ts8yk Жыл бұрын
Such a clean explanation! Loved it
@KiritiSai93
@KiritiSai93 3 ай бұрын
What device do you use for recoding these videos? The visuals are very helpful.
@ronifintech9434
@ronifintech9434 2 жыл бұрын
Amazing!!!
@rahatsshowcase8614
@rahatsshowcase8614 2 жыл бұрын
simply awsome
@tranminhquang4541
@tranminhquang4541 5 ай бұрын
Hi Neet! Very nice solution you have there! I tried to DP this problem but got a timeout and I don't know how to add cache to it ! Can you help me with it ! Thanks a lot!
@pramodhjajala8021
@pramodhjajala8021 Жыл бұрын
How did you come up with this solution ? is there any resource ? it's simple , i agree the most
@aadityakiran_s
@aadityakiran_s 10 ай бұрын
Great explanation. I did it in a DFS way but don't know why it doesn't work. Maybe I'm missing some edge cases.
@krateskim4169
@krateskim4169 5 ай бұрын
Thank you so much
@ancai5498
@ancai5498 4 ай бұрын
We could still use the Dijkstra algorithm. The core idea is to use an array to keep updating the minimum steps(also minimum cost by using the minheap) to reach certain nodes until we reach the dst node. Here is the C++ solution: int findCheapestPrice(int n, vector& flights, int src, int dst, int k) { // build adj lists; unordered_map adjs; for (auto i: flights) { adjs[i[0]].push_back({i[1], i[2]}); } // record ver vector vertex2Stops(n, INT_MAX); k += 1; priority_queue pq; // starts from src with 0 cost // {cost, nodeid, stops}; pq.push({0, src, 0}); while (!pq.empty()) { auto t = pq.top(); // std::cout
@osamaayman3765
@osamaayman3765 Жыл бұрын
Thanks Kevin😀
@malakggh
@malakggh 2 ай бұрын
Since the the graph does not contain negative weights, cant we use Dijkstra instead ?
@cpaulicka
@cpaulicka 2 жыл бұрын
Hm. I just copied your code, and then changed k=0 for the inputs, which should give -1 but instead gives 500. Help?
@zoey3371
@zoey3371 2 жыл бұрын
Great Video!!! I wanted to know, which kind of algorithm method is this? Is this DP? I am new to graphs and competitive coding in general, please do let me know, thanks!
@ShivamGupta-sd2jm
@ShivamGupta-sd2jm 2 жыл бұрын
Bellman ford algorithm
@sampatkalyan3103
@sampatkalyan3103 2 жыл бұрын
Yes Bellman ford algorithms is a dynamic Programming type programming type algorithm.
@venkatasundararaman
@venkatasundararaman 2 жыл бұрын
Do we really need the continue block? Assume if prices[s] is infinity, its anyway not going to be less than tmpPrices[d] even when its value is infinity.
@thatguy14713
@thatguy14713 2 жыл бұрын
If you were to use pure Djikstra, how would you handlel the k stops condition?
@PippyPappyPatterson
@PippyPappyPatterson 2 жыл бұрын
Just put `n_stops` as an item within the element you insert into the `min_heap` and track that. Feels much more simple than the Bellman-Ford shenanigans since we don't have any negative weights. ```python class Solution: def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int: adjacency_map = defaultdict(set) for vertex, subvertex, weight in flights: adjacency_map[vertex].add((subvertex, weight)) h = [(0, -1, src)] # weight, n_steps, vertex vertex2steps = {} while h: accumulated_weight, n_steps, vertex = heapq.heappop(h) if n_steps > k or n_steps > vertex2steps.get(vertex, float("inf")): continue vertex2steps[vertex] = n_steps if vertex == dst: return accumulated_weight for subvertex, weight in adjacency_map[vertex]: element = (accumulated_weight + weight, n_steps + 1, subvertex) heapq.heappush(h, element) return -1 # O(E * log E) O(E) ```
@cerqueirjc
@cerqueirjc 3 ай бұрын
This solution looks a lot like a 2D dynamic programming bottom-up approach, with the additional optimization in memory (because you only need the current and the previous value of k). I think this view of the problem might help others to understand it more easily, bc we can ignore all the relationship with bellmanford algo.
@siddheshb.kukade4685
@siddheshb.kukade4685 Жыл бұрын
thank you
@huseyinbarin1653
@huseyinbarin1653 2 жыл бұрын
brilliant.
@kareni7572
@kareni7572 Ай бұрын
How did you solve without adjacency list?
@awful999
@awful999 3 ай бұрын
is there a way to solve this without using the temporary distances array? how come traditional bellman-ford doesn't include this?
@saradhikiranamarthi2281
@saradhikiranamarthi2281 2 жыл бұрын
Can someone explain why only (k+1) iterations done for this problem?
@huseyinbarin1653
@huseyinbarin1653 2 жыл бұрын
simply because think like that: K = 1 is given. Between A -> B check will be our first iteration but when we reach B it will be 0 stop in between them right. That's why we're adding 1 to K to eliminate this problem during the problem
@anthonyleong4238
@anthonyleong4238 3 ай бұрын
Instead of quoting bellman ford right away, I would use dynamic programming. We would store a table which will be V by (k+1). For the 0th stop, we would only explore the neighbors to the source. For the 1st stop, we would look at all the vertices that have been explored and try to check if the distance their plus the distance to neighbors would improve the current distances. We would only take the last row as the final solution. However, to save space, we could only keep two arrays of length V at a time. I was hoping this solution could be a good way for people who haven’t looked at Bellman ford’s algorithm. However, this would need an adjacency list that is easily searchable which adds extra machinery.
@voidster3904
@voidster3904 Жыл бұрын
Great solution but I love how you misspell Dijkstra into Djikstra in all your videos lmao
@aianaabdyrakhmanova5439
@aianaabdyrakhmanova5439 10 ай бұрын
hope one day i reach your level♥
@chien-yuyeh9386
@chien-yuyeh9386 4 ай бұрын
Nice🎉
@RobinHistoryMystery
@RobinHistoryMystery 2 ай бұрын
``` for i in range(k) -> temp = prices.copy() for s, d, p in flights -> temp[d] = min(price[s] + p, price[d]) prices = temp return temp[dst] ``` I think we dont need to check if price[s] is infinity or not,
@m.y.7230
@m.y.7230 2 ай бұрын
Here we don't but Bellman-Ford is applied on negative edges where this is useful. I think that check comes out of the algorithm
@codelegacy0
@codelegacy0 2 ай бұрын
Why Multi Source BFS wont work for this problem. Coded it, but is failing 43rd testcase. Can anyone know what it is failing ? Attached code for reference: class Solution: def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int: graph = {} for c1, c2, p in flights: if c1 not in graph: graph[c1] = [(c2, p)] else: graph[c1].append((c2, p)) for i in range(n): if i not in graph: graph[i] = [] res = float('inf') queue = deque() queue.append((src, 0)) visited = {src,} while queue: if k == -1: if res == float('inf'): return -1 return res queueLen = len(queue) while queueLen: city, price = queue.popleft() for nextC, nextP in graph[city]: if nextC in visited: continue if nextC != dst: queue.append((nextC, price + nextP)) visited.add(nextC) else: res = min(res, price + nextP) queueLen -= 1 k -= 1 return -1 if res == float('inf') else res
@haoli8983
@haoli8983 6 күн бұрын
i want to know other questions about negative price
@jakobleo3440
@jakobleo3440 2 жыл бұрын
Like always, click the like button before I watch it.
@davidlee588
@davidlee588 Жыл бұрын
Sorry, I still don't understand why we need the temp copy. Why 743. Network Delay Time don't need a copy ? Can anyone explain more.
@MGtvMusic
@MGtvMusic Жыл бұрын
We are using the temp array to limit it to K stops , In Network delay time there was no such limit, we just needed the worst of the best ways to reach all nodes
@MGtvMusic
@MGtvMusic Жыл бұрын
However, Here we need to stop only K times in the middle, if you want to do it using Dijkstra you can probably do it but you have to pass the three infos to the queue everytime
@MGtvMusic
@MGtvMusic Жыл бұрын
Dijkstra's algorithm uses a priority queue to greedily select the closest vertex that has not yet been processed, and performs this relaxation process on all of its outgoing edges; by contrast, the Bellman-Ford algorithm simply relaxes all the edges and does this {|V|-1}∣V∣−1 times, where |V|∣V∣ is the number of vertices in the graph. In each of these repetitions, the number of vertices with correctly calculated distances grows, from which it follows that eventually, all vertices will have their correct distances. This method allows the Bellman-Ford algorithm to be applied to a wider class of inputs than Dijkstra.
@therealjulian1276
@therealjulian1276 3 ай бұрын
For those that are confused, I suggest watching other videos that explain Bellman-Ford in isolation. The explanation in this video is not clear at all.
@ningzedai9052
@ningzedai9052 Жыл бұрын
This question can also be resolved by SPFA algorithm. The theory is similar here, but much faster than Bellman-Ford .
@nobiaaaa
@nobiaaaa Жыл бұрын
I'm new to English and algorithm. And now I'm confused, is it dikestruh or jikestruh?
@technophile_
@technophile_ Жыл бұрын
Unfortunately, I just don’t understand how applying the Bellman Ford algorithm, magically solves the problem. If there’s someone who can explain why it works, it’d be very helpful.
@JM_utube
@JM_utube 11 ай бұрын
that's literally this entire video
@shuvbhowmickbestin
@shuvbhowmickbestin 10 ай бұрын
One small question, when we are assigning prices = tmpPrices aren't the two lists actually referencing to the same data? In this way if we make any change in tmpPrices down the line inside the loop then the same will be reflected in the original array right? Doesn't this defeat the whole purpose of using a tmpPrices array?
@surters
@surters 2 жыл бұрын
Why do you need tmpPrices?
@gracehuang4831
@gracehuang4831 2 жыл бұрын
14:04
@philipjung4635
@philipjung4635 2 ай бұрын
Isn’t djikstra pronounced with a hard I like “eye”?
@NicholasKoh-yj9gk
@NicholasKoh-yj9gk 5 ай бұрын
Hi @Neetcode, why don't we need DIjkstra's algorithm for this problem?
@mojojojo1211
@mojojojo1211 Жыл бұрын
Its just too much man, How many problems are out there, and why should I learn all this, Fuck it man
@danilomenoli
@danilomenoli 2 ай бұрын
I tried to solve this with a modified Dijkstra algorithm which gives infinite weight after number of hops is > k+1. Well it kinda works for most of the cases but some inputs breaks doesn't produce the smallest path, as expected for some problem that can be solved only by DP and you try a greedy approach. Life sucks. I'm avoiding DP since it's a hard topic and I'm not even good in other topics, so I'm saving this question for later.
@ghazanferwahab5673
@ghazanferwahab5673 2 жыл бұрын
why we use temp array can u explain agian??
@dossymzhankudaibergenov8193
@dossymzhankudaibergenov8193 2 жыл бұрын
Here is the main idea in copy array, because in every iteration of k, we dont stop
@PippyPappyPatterson
@PippyPappyPatterson 2 жыл бұрын
Why wouldn't we just track the number of steps we've taken as `n_steps` and continue if `n_steps > k + 1`?
@mrditkovich2339
@mrditkovich2339 2 жыл бұрын
Neetcode is OP
@hari8568
@hari8568 5 ай бұрын
Do we need to consider the edge case where a direct flight between two nodes is cheaper than intermediate nodes?
@neve177
@neve177 2 жыл бұрын
> 1:54 Djikstra
@yuganderkrishansingh3733
@yuganderkrishansingh3733 2 жыл бұрын
tbh solution didn't make sense.It says bellman ford but talks about BFS throughout video. Also doesn't clearly explains the intution.
@pruthvirajpatil7798
@pruthvirajpatil7798 4 ай бұрын
Agreed. This is one of his videos which I don't really prefer to follow.
@VarunMittal-viralmutant
@VarunMittal-viralmutant 2 жыл бұрын
Nice trick !! One question though. Using temp array is kind of deviation from Bellman Ford's right ? If it were regular Bellman Ford, and k = 0, even a single iteration would also give: 0 0 1 100 2 200 But our condition produces: 0 0 1 100 2 500
@ohyash
@ohyash 2 жыл бұрын
Yes, but this extra parameter "k" forces us to not update the original algo.
@shouryansharma9441
@shouryansharma9441 4 ай бұрын
This code fails in leetcode due to the if condition leading to continue, here is a working implementation of above explanation class Solution: def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int: price = [float('inf')]*n price[src]=0 for i in range(k+1): temp = price.copy() for s,d,p in flights: temp[d] = min(temp[d],price[s]+p) price = temp if(price[dst]==float('inf')): return -1 return price[dst]
@EduarteBDO
@EduarteBDO 6 ай бұрын
With the help of this solution I made the BFS solution: class Solution: def findCheapestPrice(self, n: int, flights: list[list[int]], src: int, dst: int, k: int) -> int: adj = {i:[] for i in range(n)} deq = deque([(0,src)]) prices = [float('inf')] * n prices[src] = 0 for cur, to, price in flights: adj[cur].append((price,to)) for i in range(k+1): for j in range(len(deq)): cost, node = deq.popleft() for price, to in adj[node]: new_cost = cost+price if prices[to] > new_cost: prices[to] = new_cost deq.append((new_cost,to)) return prices[dst] if prices[dst] != float('inf') else -1
@director8656
@director8656 2 жыл бұрын
good vid, just one thing you can improve on I may suggest is don't put other KZbinrs to shame by making such good content
@Mikeymikers1
@Mikeymikers1 2 жыл бұрын
not just that, the code he writes is so clear and simple to follow. it is really good to write like him in interviews.
@DavidDLee
@DavidDLee Ай бұрын
1. It's not a true Bellman Ford, but a modification that supports the max k requirement. Here is a nice explanation of true Bellman Ford: kzbin.info/www/bejne/pZO6iZ2qnJV_bJY 2. The question can be solved with a modified BFS, which stops after k + 1 iterations and does not limit visits to a node, but does that only if it can be done more cheaply than prior visits This solution is faster than the BF solution on Leetcode: def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int: k += 1 # k is stops, we count legs adj = collections.defaultdict(list) for s, d, c in flights: adj[s].append((d, c)) totalCost = [math.inf] * n changes = True queue = deque([(src, 0)]) i = -1 # reaching src is not an iteration while queue and i < k: print("Iteration", i) i += 1 for j in range(len(queue)): node, cost = queue.popleft(); if cost >= totalCost[node]: print("Reached", node, "again at a higher cost", cost, "ignoring") continue print("Reached", node, "cost", cost) totalCost[node] = cost for dest, price in adj.get(node, []): newCost = cost + price if newCost < totalCost[dest]: queue.append((dest, newCost)) result = totalCost[dst] return result if result != math.inf else -1
@ShivangiSingh-wc3gk
@ShivangiSingh-wc3gk 2 жыл бұрын
I did it another way an encountered Time Exceeded :( so came here to watch this.
@Terracraft321
@Terracraft321 2 жыл бұрын
Brute force is okay probably IRL and working to more optimal solution, a lot of medium questions need pre-optimizations to pass without time exceeded though.
@princeanthony8525
@princeanthony8525 Жыл бұрын
Temp array isn’t still clear. You rushed it too quickly.
@haoli8983
@haoli8983 6 күн бұрын
it's my BFS solution. a little complicated.... var findCheapestPrice = function(n, flights, src, dst, k) { let graph = {}; for(let i = 0; i < n; i++) { graph[i] = []; } for(let [from ,to, price] of flights) { graph[from].push([to, price]); } let que = [[src, 0]]; let minPrice = Infinity; let visited = {}; while(que.length && k >= 0) { let len = que.length; for(let i =0; i < len; i++) { let [currNode, currPrice] = que.shift(); for(let [nextNode, nextPrice] of graph[currNode]) { let newPrice = currPrice + nextPrice; if (newPrice < ( visited[nextNode] || Infinity)) { visited[nextNode] = newPrice; if (nextNode === dst) { minPrice = Math.min(minPrice, newPrice); } else { que.push([nextNode, newPrice]) } } } } k--; } return minPrice === Infinity ? -1 : minPrice; };
Surrounded Regions - Graph - Leetcode 130 - Python
14:50
NeetCode
Рет қаралды 71 М.
Snakes and Ladders - Leetcode 909 - Python
21:22
NeetCode
Рет қаралды 47 М.
마시멜로우로 체감되는 요즘 물가
00:20
진영민yeongmin
Рет қаралды 32 МЛН
Самый Молодой Актёр Без Оскара 😂
00:13
Глеб Рандалайнен
Рет қаралды 7 МЛН
DEFINITELY NOT HAPPENING ON MY WATCH! 😒
00:12
Laro Benz
Рет қаралды 57 МЛН
Cool Items! New Gadgets, Smart Appliances 🌟 By 123 GO! House
00:18
123 GO! HOUSE
Рет қаралды 17 МЛН
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 356 М.
Reconstruct Itinerary - Leetcode 332 - Python
17:38
NeetCode
Рет қаралды 62 М.
Google Coding Interview With A Competitive Programmer
54:17
Clément Mihailescu
Рет қаралды 2,5 МЛН
I gave 127 interviews. Top 5 Algorithms they asked me.
8:36
Sahil & Sarra
Рет қаралды 624 М.
The Algorithm Behind Spell Checkers
13:02
b001
Рет қаралды 408 М.
Look, this is the 97th generation of the phone?
0:13
Edcers
Рет қаралды 4,7 МЛН
iPhone 15 Pro в реальной жизни
24:07
HUDAKOV
Рет қаралды 422 М.
Что делать если в телефон попала вода?
0:17
Лена Тропоцел
Рет қаралды 1,7 МЛН