题目
https://leetcode-cn.com/problems/network-delay-time/
答案
我自己写的答案,超时了ORZ。用的是深度优先遍历(写树习惯了,拿到手直接DFS)。然后就超时,想着琢磨一下广度优先遍历,但是有点问题,最终还是放弃了看的答案。
看到这个题的时候我知道是图,但是忘记最短路径算法怎么写的了ORZ。
class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
final int INF = Integer.MAX_VALUE / 2;
int[][] g = new int[n][n];
for (int i = 0; i < n; ++i) {
Arrays.fill(g[i], INF);
}
for (int[] time : times) {
g[time[0]-1][time[1]-1] = time[2];
}
int[] dist = new int[n];
Arrays.fill(dist, INF);
dist[k-1] = 0;
boolean[] used = new boolean[n];
for (int i = 0; i < n; ++i) {
int x = -1;
for (int y = 0; y < n; ++y) {
if (!used[y] && (x == -1 || dist[y] < dist[x])) {
x = y;
}
}
used[x] = true;
for (int y = 0; y < n; ++y) {
dist[y] = Math.min(dist[y], dist[x] + g[x][y]);
}
}
int ans = Arrays.stream(dist).max().getAsInt();
return ans == INF ? -1 : ans;
}
public static void main(String[] args) {
int[][] times = new int[][]{{1,2,1}, {2,3,7}, {1,3,4}, {2,1,2}};
int n = 3;
int k = 2;
new Solution().networkDelayTime(times, n, k);
}
}
总结
其实这个答案我好像还没吃透,还是要再看一下。
超出自己能力知识范围的不要硬抗,你不知道的就是不知道,站在前人肩膀上一辈子才能突破一点点,想靠你几天基本不可能的。所以2个小时一直超时并且没有思路的请放弃。学会放弃也很重要。
版权声明:本文为Kai_Chan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。