1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance - Best Practices of LeetCode Solutions
LeetCode link: 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance, difficulty: Medium.
LeetCode description of "1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance"
There are n cities numbered from 0 to n-1. Given the array edges where edges[i] = [from_i, to_i, weight_i] represents a bidirectional and weighted edge between cities from_i and to_i, and given the integer distanceThreshold.
Return the city with the smallest number of cities that are reachable through some path and whose distance is at most distanceThreshold, If there are multiple such cities, return the city with the greatest number.
Notice that the distance of a path connecting cities i and j is equal to the sum of the edges' weights along that path.
Input: n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distanceThreshold = 4
Output: 3
Explanation:
The figure above describes the graph.
The neighboring cities at a distanceThreshold = 4 for each city are:
City 0 -> [City 1, City 2]
City 1 -> [City 0, City 2, City 3]
City 2 -> [City 0, City 1, City 3]
City 3 -> [City 1, City 2]
Cities 0 and 3 have 2 neighboring cities at a distanceThreshold = 4, but we have to return city 3 since it has the greatest number.
Input: n = 5, edges = [[0,1,2],[0,4,8],[1,2,3],[1,4,2],[2,3,1],[3,4,1]], distanceThreshold = 2
Output: 0
Explanation:
The figure above describes the graph.
The neighboring cities at a distanceThreshold = 2 for each city are:
City 0 -> [City 1]
City 1 -> [City 0, City 4]
City 2 -> [City 3, City 4]
City 3 -> [City 2, City 4]
City 4 -> [City 1, City 2, City 3]
The city 0 has 1 neighboring city at a distanceThreshold = 2.
2 <= n <= 1001 <= edges.length <= n * (n - 1) / 2edges[i].length == 30 <= from_i < to_i < n1 <= weight_i, distanceThreshold <= 10^4- All pairs
(from_i, to_i)are distinct.
Hint 1
Use Floyd-Warshall's algorithm to compute any-point to any-point distances. (Or can also do Dijkstra from every node due to the weights are non-negative).Hint 2
For each city calculate the number of reachable cities within the threshold, then search for the optimal city.Just like the Hints says, you can use Floyd-Warshall Algorithm to compute any-point to any-point shortest distances.
Or you can also do Dijkstra Algorithm from every node due to the weights are non-negative.
Or you can also do Queue-Improved Bellman-Ford Algorithm from every node.
- Time:
O(N^3). - Space:
O(N^2).
class Solution:
def findTheCity(self, n: int, edges: List[List[int]], distance_threshold: int) -> int:
dp = []
for i in range(n):
dp.append([float('inf')] * n)
dp[i][i] = 0
for i, j, weight in edges:
dp[i][j] = weight
dp[j][i] = weight
for k in range(n):
for i in range(n):
for j in range(n):
dp[i][j] = min(
dp[i][j],
dp[i][k] + dp[k][j],
)
result = -1
min_count = float('inf')
for i, row in enumerate(dp):
count = len([distance for distance in row if distance <= distance_threshold])
if count <= min_count:
min_count = count
result = i
return result// Welcome to create a PR to complete the code of this language, thanks!// Welcome to create a PR to complete the code of this language, thanks!// Welcome to create a PR to complete the code of this language, thanks!// Welcome to create a PR to complete the code of this language, thanks!// Welcome to create a PR to complete the code of this language, thanks!# Welcome to create a PR to complete the code of this language, thanks!// Welcome to create a PR to complete the code of this language, thanks!

