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

Sdílet
Vložit
  • čas přidán 24. 07. 2024
  • 🚀 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.
  • Věda a technologie

Komentáře • 120

  • @NeetCode
    @NeetCode  Před 2 lety +10

    💡 GRAPH PLAYLIST: czcams.com/video/EgI5nU9etnU/video.html

    • @code_school6946
      @code_school6946 Před 2 lety

      hey neetcode please solve problems from love babbar's 450 dsa sheet as well. Rest love your explanation

  • @jonaskhanwald566
    @jonaskhanwald566 Před 2 lety +189

    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  Před 2 lety +25

      Hey Jonas, congrats on the offer!!! I'm glad your hard work paid off!

    • @jonaskhanwald566
      @jonaskhanwald566 Před 2 lety +11

      @@NeetCode Thanks again. never stop posting videos

    • @prempeacefulchannel
      @prempeacefulchannel Před 2 lety +9

      Congratulations Jonas!

    • @pritz9
      @pritz9 Před rokem +4

      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 Před 11 měsíci

      w name

  • @kickradar3348
    @kickradar3348 Před 2 lety +55

    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.

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

    Your solution is constantly the most readable and elegant one! Really appreciate all your efforts!

  • @chaitya6643
    @chaitya6643 Před 5 měsíci +11

    This is the first time I did not understand something you taught @NeetCode

  • @rahulpandey3815
    @rahulpandey3815 Před 2 lety +9

    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 Před 2 lety +3

      can you please further explain me why we need a temp array?

  • @gaaligadu148
    @gaaligadu148 Před 2 lety +26

    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  Před 2 lety +15

      Agree, this one is really hard.

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

      Yeah this is very difficult

  • @nashifcod
    @nashifcod Před 2 lety +7

    This channel is so underrated, NeetCode fr the GOAT

  • @GoogleAccount-wy2hc
    @GoogleAccount-wy2hc Před rokem +7

    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.

  • @willy2184
    @willy2184 Před 5 měsíci

    Thank you, I have an interview for a MAANG company next week and I feel confident with the help of your videos!

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

    I loved your videos, pls continue posting more topics. I love the way you teach.

  • @kritidiptoghosh4272
    @kritidiptoghosh4272 Před 2 lety +7

    i really like the use of temp array to limit to k stops ,regular BF doesnt take care of that

  • @arijitdey8419
    @arijitdey8419 Před rokem +1

    superb explanation..specially the temporary array part,thanks a lot!!!

  • @rameshjha2264
    @rameshjha2264 Před 2 lety +8

    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.

  • @thelasttimeibreathedwas4468

    Mind Blowing approach, Thanks Man

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

    Thanks for the neat explanation and code!

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

    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.

  • @MP-ny3ep
    @MP-ny3ep Před rokem

    Phenomenal explanation. Thank you so much !!!

  • @marcelofernandes3230
    @marcelofernandes3230 Před 2 lety +7

    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

  • @ancai5498
    @ancai5498 Před 4 měsíci

    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

  • @yashwanthgowda1517
    @yashwanthgowda1517 Před měsícem

    Great explanation, Thank you so much !❤

  • @soumyajitganguly2593
    @soumyajitganguly2593 Před 2 lety +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.

  • @utsavmathur1478
    @utsavmathur1478 Před 2 lety +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 Před 2 lety +1

      Same. However one problem with a DFS is that I get a TLE with 48/51 cases on leetcode with javascript

    • @halahmilksheikh
      @halahmilksheikh Před 2 lety +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 Před 2 lety +1

      @@halahmilksheikh good thoughts, thank you.

    • @soumyajitganguly2593
      @soumyajitganguly2593 Před 2 lety

      @@halahmilksheikh I made DFS work with memoization. But then it became more of a DP solution than vanilla DFS.

    • @guambomber448
      @guambomber448 Před rokem

      Since there are no negative costs I just use Djikstras algorithm to solve this

  • @KiritiSai93
    @KiritiSai93 Před 3 měsíci +1

    What device do you use for recoding these videos? The visuals are very helpful.

  • @amrutaparab4939
    @amrutaparab4939 Před 5 měsíci

    You are just tooo tooo good thankyou!

  • @guambomber448
    @guambomber448 Před rokem

    Since there are no negative weights I chose to use Djikstras algorithm. It was nice seeing this solution too!

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

    Just a technicality, but isn't this approach O(k*(V+E)), since we are copying the temp_cost array at each iteration?

  • @CostaKazistov
    @CostaKazistov Před rokem +12

    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 Před rokem +6

      If you ever feel useless remember there is a 'j' in Dijkstra 😑

    • @pepehimovic3135
      @pepehimovic3135 Před 9 měsíci +1

      @@wernerheisenberg9653It’s just how Dutch and some similar languages work. e.g. Virgil van Dijk. Rijkaard.

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

    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.

  • @prempeacefulchannel
    @prempeacefulchannel Před 2 lety

    Thanks for the vid 👌

  • @asdfasyakitori8514
    @asdfasyakitori8514 Před 8 měsíci

    Great video!

  • @cerqueirjc
    @cerqueirjc Před 3 měsíci

    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.

  • @BrandonHo
    @BrandonHo Před rokem

    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?

  • @malakggh
    @malakggh Před 2 měsíci

    Since the the graph does not contain negative weights, cant we use Dijkstra instead ?

  • @tranminhquang4541
    @tranminhquang4541 Před 5 měsíci

    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!

  • @YashSingh-ts8yk
    @YashSingh-ts8yk Před rokem

    Such a clean explanation! Loved it

  • @abhinav54555
    @abhinav54555 Před 5 měsíci

    Very good explanation

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

    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.

  • @osamaayman3765
    @osamaayman3765 Před rokem

    Thanks Kevin😀

  • @PippyPappyPatterson
    @PippyPappyPatterson Před 2 lety

    Does anyone know why we use the `tmp` array? Other implementations of Bellman-Ford online don't use it.

  • @CyborgT800
    @CyborgT800 Před 2 lety

    Does it also mean this code should work for a scenario with at least K stops and can you specify a recursion for this?

  • @krateskim4169
    @krateskim4169 Před 5 měsíci

    Thank you so much

  • @pramodhjajala8021
    @pramodhjajala8021 Před rokem

    How did you come up with this solution ? is there any resource ? it's simple , i agree the most

  • @rahatsshowcase8614
    @rahatsshowcase8614 Před 2 lety

    simply awsome

  • @zoey3371
    @zoey3371 Před 2 lety

    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!

  • @anthonyleong4238
    @anthonyleong4238 Před 3 měsíci

    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.

  • @ronifintech9434
    @ronifintech9434 Před 2 lety

    Amazing!!!

  • @ningzedai9052
    @ningzedai9052 Před rokem

    This question can also be resolved by SPFA algorithm. The theory is similar here, but much faster than Bellman-Ford .

  • @therealjulian1276
    @therealjulian1276 Před 3 měsíci +1

    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.

  • @cpaulicka
    @cpaulicka Před 2 lety

    Hm. I just copied your code, and then changed k=0 for the inputs, which should give -1 but instead gives 500. Help?

  • @siddheshb.kukade4685
    @siddheshb.kukade4685 Před rokem

    thank you

  • @codelegacy0
    @codelegacy0 Před 2 měsíci

    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

  • @voidster3904
    @voidster3904 Před rokem

    Great solution but I love how you misspell Dijkstra into Djikstra in all your videos lmao

  • @awful999
    @awful999 Před 3 měsíci

    is there a way to solve this without using the temporary distances array? how come traditional bellman-ford doesn't include this?

  • @haoli8983
    @haoli8983 Před 8 dny

    i want to know other questions about negative price

  • @RobinHistoryMystery
    @RobinHistoryMystery Před 2 měsíci +1

    ```
    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 Před 2 měsíci

      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

  • @NicholasKoh-yj9gk
    @NicholasKoh-yj9gk Před 5 měsíci

    Hi @Neetcode, why don't we need DIjkstra's algorithm for this problem?

  • @huseyinbarin1653
    @huseyinbarin1653 Před 2 lety

    brilliant.

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

    hope one day i reach your level♥

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

    Like always, click the like button before I watch it.

  • @thatguy14713
    @thatguy14713 Před 2 lety

    If you were to use pure Djikstra, how would you handlel the k stops condition?

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

      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)
      ```

  • @danilomenoli
    @danilomenoli Před 2 měsíci

    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.

  • @nobiaaaa
    @nobiaaaa Před rokem

    I'm new to English and algorithm. And now I'm confused, is it dikestruh or jikestruh?

  • @technophile_
    @technophile_ Před rokem +2

    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 Před 11 měsíci

      that's literally this entire video

  • @shouryansharma9441
    @shouryansharma9441 Před 4 měsíci +1

    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]

  • @davidlee588
    @davidlee588 Před rokem +2

    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 Před rokem

      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 Před rokem

      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 Před rokem

      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.

  • @mojojojo1211
    @mojojojo1211 Před rokem +1

    Its just too much man, How many problems are out there, and why should I learn all this, Fuck it man

  • @yuganderkrishansingh3733
    @yuganderkrishansingh3733 Před 2 lety +7

    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 Před 4 měsíci

      Agreed. This is one of his videos which I don't really prefer to follow.

  • @shuvbhowmickbestin
    @shuvbhowmickbestin Před 10 měsíci +1

    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?

  • @saradhikiranamarthi2281

    Can someone explain why only (k+1) iterations done for this problem?

    • @huseyinbarin1653
      @huseyinbarin1653 Před 2 lety

      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

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

    Neetcode is OP

  • @philipjung4635
    @philipjung4635 Před 2 měsíci

    Isn’t djikstra pronounced with a hard I like “eye”?

  • @princeanthony8525
    @princeanthony8525 Před rokem +1

    Temp array isn’t still clear. You rushed it too quickly.

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

    Why do you need tmpPrices?

  • @neve177
    @neve177 Před 2 lety

    > 1:54 Djikstra

  • @DavidDLee
    @DavidDLee Před měsícem

    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: czcams.com/video/obWXjtg0L64/video.html
    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

  • @VarunMittal-viralmutant
    @VarunMittal-viralmutant Před 2 lety +1

    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 Před 2 lety

      Yes, but this extra parameter "k" forces us to not update the original algo.

  • @dossymzhankudaibergenov8193

    Here is the main idea in copy array, because in every iteration of k, we dont stop

    • @PippyPappyPatterson
      @PippyPappyPatterson Před 2 lety

      Why wouldn't we just track the number of steps we've taken as `n_steps` and continue if `n_steps > k + 1`?

  • @chien-yuyeh9386
    @chien-yuyeh9386 Před 4 měsíci

    Nice🎉

  • @EduarteBDO
    @EduarteBDO Před 6 měsíci

    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

  • @haoli8983
    @haoli8983 Před 8 dny

    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;
    };

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

    why we use temp array can u explain agian??

  • @hari8568
    @hari8568 Před 5 měsíci

    Do we need to consider the edge case where a direct flight between two nodes is cheaper than intermediate nodes?

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

    good vid, just one thing you can improve on I may suggest is don't put other CZcamsrs to shame by making such good content

    • @Mikeymikers1
      @Mikeymikers1 Před 2 lety +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.

  • @ShivangiSingh-wc3gk
    @ShivangiSingh-wc3gk Před 2 lety

    I did it another way an encountered Time Exceeded :( so came here to watch this.

    • @Terracraft321
      @Terracraft321 Před 2 lety

      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.