【Leetcode】1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance

题目地址:

https://leetcode.com/problems/find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/

给定 n n n个顶点的无向非负权图,顶点编号 0 ∼ n − 1 0\sim n-1 0n1。给定一个正的阈值 t t t,问所有点中能走不超过 t t t的距离到达的点最少的那个点的编号。如果多个点满足要求,则返回编号最大的那个。

可以用多点对最短路的Floyd算法先求出两两的最短路长度,参考https://blog.csdn.net/qq_46105170/article/details/113821689,然后直接暴力枚举每个点即可。代码如下:

class Solution {
 public:
  int findTheCity(int n, vector<vector<int>>& edges, int dt) {
    int d[n][n];
    memset(d, 0x3f, sizeof d);
    for (auto& e : edges) {
      int x = e[0], y = e[1];
      d[x][y] = d[y][x] = min(d[x][y], e[2]);
    }
    for (int k = 0; k < n; k++)
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
          d[i][j] = i == j ? 0 : min(d[i][j], d[i][k] + d[k][j]);

    int res = n, max_cnt = n;
    for (int i = 0; i < n; i++) {
      int cnt = 0;
      for (int j = 0; j < n; j++) {
        if (j == i) continue;
        if (d[i][j] <= dt) cnt++;
      }
      if (cnt <= max_cnt) {
        res = i;
        max_cnt = cnt;
      }
    }

    return res;
  }
};

时间复杂度 O ( n 3 ) O(n^3) O(n3),空间 O ( n 2 ) O(n^2) O(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值