/**
* construct adjacency matrix and degree array instead of adjacency table
* traverse edges instead of vertices to reduce one level of loop
* Runtime: 45 ms, faster than 87.20%
* Memory Usage: 69.8 MB, less than 33.74%
*/
class Solution {
public int minTrioDegree(int n, int[][] edges) {
int min = Integer.MAX_VALUE;
// construct dajacency matrix and degree array
boolean[][] adjacency = new boolean[n + 1][n + 1];
int[] degrees = new int[n + 1];
boolean[] trioFree = new boolean[n + 1];
for (int[] edge : edges) {
int v1 = edge[0], v2 = edge[1];
adjacency[v1][v2] = true;
adjacency[v2][v1] = true;
degrees[v1]++;
degrees[v2]++;
}
for (int[] edge : edges) {
for (int third = Math.max(edge[0], edge[1]) + 1; third <= n; third++) {
if (adjacency[third][edge[0]] && adjacency[third][edge[1]]) { // a trio found
min = Math.min(min, degrees[edge[0]] + degrees[edge[1]] + degrees[third] - 6);
}
}
}
return min == Integer.MAX_VALUE ? -1 : min;
}
}
1761. Minimum Degree of a Connected Trio in a Graph [Hard]
最新推荐文章于 2024-05-13 21:07:16 发布