如何解决网络延迟问题 - 复杂性分析
下面是leetcode的网络延迟问题的解决方案。我已经编写了一个所有测试用例成功的解决方案。但无法分析时间复杂度。我相信它的 O(V^2 + E) 其中 V 是节点和 E 边的数量。 在这个解决方案中,虽然我每次都添加每个节点的所有相邻节点,但如果该节点已经存在最小距离,则不会进一步处理它们。 Leetcode 问题链接 https://leetcode.com/problems/network-delay-time
public int networkDelayTime(int[][] times,int n,int k) {
int[] distances = new int[n+1];
Arrays.fill(distances,-1);
if(n > 0){
List<List<int[]>> edges = new ArrayList<List<int[]>>();
for(int i = 0 ; i <= n ; i++){
edges.add(new ArrayList<int[]>());
}
for(int[] time : times){
edges.get(time[0]).add(new int[]{time[1],time[2]});
}
Queue<Vertex> queue = new LinkedList<>();
queue.add(new Vertex(k,0));
while(!queue.isEmpty()){
Vertex cx = queue.poll();
int index = cx.index;
int distance = cx.distance;
//process adjacents only if distance is updated
if(distances[index] == -1 || distances[index] > distance){
distances[index] = distance;
List<int[]> adjacents = edges.get(index);
for(int[] adjacent : adjacents){
queue.add(new Vertex(adjacent[0],adjacent[1]+distance));
}
}
}
}
int sum = 0;
for(int i = 1 ; i <= n; i++){
int distance = distances[i];
if(distance == -1){
return -1;
}
sum = Math.max(sum,distance);
}
return sum;
}
public static class Vertex{
int index;
int distance;
public Vertex(int i,int d){
index = i;
distance = d;
}
}
解决方法
您应该使用 PriorityQueue 而不是 LinkedList
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。