Leetcode1334. 阈值距离内邻居最少的城市

Every day a Leetcode

题目来源:1334. 阈值距离内邻居最少的城市

解法1:Floyd 算法

使用 Floyd 算法得到任意两点之间的最短路,然后统计每一个节点满足条件(距离在 distanceThreshold 以内)的邻居数量。

代码:

/*
 * @lc app=leetcode.cn id=1334 lang=cpp
 *
 * [1334] 阈值距离内邻居最少的城市
 */

// @lc code=start

// Floyd 算法

class Solution
{
public:
    int findTheCity(int n, vector<vector<int>> &edges, int distanceThreshold)
    {
        // 初始化邻接矩阵
        vector<vector<int>> grid(n, vector<int>(n, INT_MAX / 2));
        // 建图
        for (vector<int> &edge : edges)
        {
            int from = edge[0], to = edge[1], weight = edge[2];
            grid[from][to] = grid[to][from] = weight;
        }
        // 求最短路
        for (int k = 0; k < n; k++)
        {
            grid[k][k] = 0;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                    grid[i][j] = min(grid[i][j], grid[i][k] + grid[k][j]);
        }
        // 求答案
        pair<int, int> ans(INT_MAX / 2, -1);
        for (int i = 0; i < n; i++)
        {
            int count = 0;
            for (int j = 0; j < n; j++)
                if (grid[i][j] <= distanceThreshold)
                    count++;
            if (count <= ans.first)
                ans = make_pair(count, i);
        }
        return ans.second;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n3),其中 n 是图中节点个数。Floyd 算法使用每一个节点对任意两个节点进行松弛操作。

空间复杂度:O(n2),其中 n 是图中节点个数。使用邻接矩阵存储任意两点之间的距离。

解法2:Dijkstra 算法

我们可以对每一个节点求解单源最短路,即某一个节点到其它所有节点的最短距离。

朴素的 Dijkstra 算法不断使用距离最近的节点来松弛到其它节点的距离。

代码:

class Solution {
public:
    int findTheCity(int n, vector<vector<int>> &edges, int distanceThreshold) {
        pair<int, int> ans(INT_MAX / 2, -1);
        vector<vector<int>> dis(n, vector<int>(n, INT_MAX / 2));
        vector<vector<int>> vis(n, vector<int>(n, false));
        vector<vector<int>> mp(n, vector<int>(n, INT_MAX / 2));
        for (auto &eg: edges) {
            int from = eg[0], to = eg[1], weight = eg[2];
            mp[from][to] = mp[to][from] = weight;
        }
        for (int i = 0; i < n; ++i) {
            dis[i][i] = 0;
            for (int j = 0; j < n; ++j) {
                int t = -1;
                for (int k = 0; k < n; ++k) {
                    if (!vis[i][k] && (t == -1 || dis[i][k] < dis[i][t])) {
                        t = k;
                    }
                }
                for (int k = 0; k < n; ++k) {
                    dis[i][k] = min(dis[i][k], dis[i][t] + mp[t][k]);
                }
                vis[i][t] = true;
            }
        }
        for (int i = 0; i < n; ++i) {
            int cnt = 0;
            for (int j = 0; j < n; ++j) {
                if (dis[i][j] <= distanceThreshold) {
                    cnt++;
                }
            }
            if (cnt <= ans.first) {
                ans = {cnt, i};
            }
        }
        return ans.second;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n3),其中 n 是图中节点个数。对图中的每一个节点执行 Dijkstra 算法。Dijkstra 算法使用每一个顶点对当前节点到其它节点之间的距离进行松弛。

空间复杂度:O(n2),其中 n 是图中节点个数。使用邻接矩阵存储任意两点之间的距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql词法分析实验(二)

表名叫select123能不能创建一个表&#xff1f; 在 MySQL 中&#xff0c;可以创建一个名为 select123 的表&#xff0c;但由于 SELECT 是 MySQL 的一个保留关键字&#xff0c;通常建议避免使用它作为表名的一部分&#xff0c;以防止潜在的解析错误或混淆。如果确实需要使用这样…

带头双向循环链表的实现

带头双向循环链表的实现 文章目录 带头双向循环链表的实现一、模型构建二、代码实现&#xff08;接口函数以及测试用例&#xff09;①初始化 Create函数②尾插③尾删④头插⑤头删⑥查找⑦在pos位置前插入新尾插新头插 ⑧删除pos位新尾删新头删 ⑨销毁链表⑩打印链表⑪测试用例…

SAP Debug时如何跳过(不执行)某些代码

Debug时如何跳过(不执行)某些代码 在DEBUG界面, 首先将光标定位到想跳至的代码行, 然后从右键菜单中选择Goto Statement, 或者从Debugger菜单中选择Goto Statement:&#xff08;效果相同&#xff09; 然后光标就会定位到想跳至的代码行 执行结果如下: 结果是000的原因是&#…

保姆级前端翻牌效果(CSS)

效果 翻牌效果 hover 时候 代码直接上 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

微服务的注册发现和微服务架构下的负载均衡

文章目录 微服务注册模型服务注册与发现怎么保证高可用【1. 服务端崩溃检测】【2. 客户端容错】【3. 注册中心选型】 微服务架构下的负载均衡【1.轮询与加权轮询】【2.随机与加权随机】【3.哈希与一致性哈希】【4.最少连接数】【5.最少活跃数】【6.最快响应时间】【总结】 负载…

消防救援大队应用“码“上监管 实现重点领域监督全覆盖

近年以来&#xff0c;一直存在消防安全风险防控不精准、问题发现不及时、监督效果不明显等难点问题&#xff0c;我们充分利用信息化手段&#xff0c;探索开通“码上监督”网络举报平台&#xff0c;实现监督途径从“线下”拓展到“线上”&#xff0c;“码上监督”马上办。 问题…

容器size()无符号数导致的for循环崩溃

1.问题描述 容器size()无符号数导致的for循环崩溃 for (int index 0; index < static_cast(intVec.size())-1; index) { printf(“%d”,intVec[index]); } 如果不做强转&#xff0c;可能会有两个问题&#xff1a; &#xff08;1&#xff09;编译不过 &#xff08;2&#x…

K8S 集群搭建

1、搭建清单 2台linux服务器&#xff08;一个master节点&#xff0c;一个node节点&#xff09;&#xff0c;建议搭3台&#xff08;一个master&#xff0c;两个node&#xff09; 我使用的是腾讯云&#xff0c;节点与节点使用公网IP通信 确保2台服务器都安装了docker 2、服务…

unity 使用Vuforia扫描实体物体交互

文章目录 前言一、Vuforia是什么&#xff1f;二、Unity导入Vuforia1.去Unity - Windows – Asset Store&#xff0c;搜vuforia engine&#xff0c;添加到我的资源2.从 Unity 的菜单 Assets -> Import package -> Custom Package 导入脚本&#xff0c;添加 Vuforia Engine…

Echarts 图表添加横向 竖向滚动条

1.横向滚动条 dataZoom: [{// 设置滚动条的隐藏与显示show: true,// 设置滚动条类型type: "slider",// 设置背景颜色backgroundColor: "rgb(19, 63, 100)",// 设置选中范围的填充颜色fillerColor: "rgb(16, 171, 198)",// 设置边框颜色borderCo…

PGVector 管理工具 pgAdmin

PGVector 管理工具 pgAdmin pgAdmin 下载地址pgAdmin 安装pgAdmin 使用 pgAdmin 下载地址 https://www.postgresql.org/ftp/pgadmin/pgadmin4/ pgAdmin 安装 双击 pgadmin4-*-x64.exe 安装文件&#xff0c;选择安装路径&#xff0c;后面安装提示单击 next 就可以了。 pgAdm…

数据迁移教程 | 从 Postgre/Greenplum 到 DolphinDB

PostgreSQL 是一种开源的关系型数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;是最广泛使用的开源数据库之一。它允许用户通过添加自定义函数、数据类型和索引等方式扩展其功能&#xff0c;支持 ACID 事务&#xff0c;并使用多版本并发控制 (MVCC&#xff09;来管理并…

JDK 环境变量设置

目录 一. 前言 二. 下载 JDK 2.1. JDK 8 2.2. JDK 17 2.3. JDK 21 三. 环境变量设置 3.1. Windows 环境配置 3.1.1. 打开环境变量配置窗口 3.1.2. 配置环境变量 JAVA_HOME 3.1.3. 配置环境变量 CLASSPATH 3.1.4. 环境变量 Path 末尾追加 3.1.5. 检查JDK是否安装成…

北斗卫星推动我国法治建设

北斗卫星推动我国法治建设发展 10月26日下午&#xff0c;第二届北斗规模应用国际峰会北斗规模应用法治保障专题论坛在湖南省株洲市召开。与会专家围绕北斗法治建设全局、北斗涉外法治建设、北斗品牌塑造、北斗产业生态建设及政策法规完善等方面&#xff0c;进行了深入研讨交流。…

搬砖日记:post传数组(三种格式)

1. json型 request({url: /msg/message/batch/read,data,method: post,content-Type: application/json })2. formData数组型 Content-Type: application/x-www-form-urlencoded request({url: /msg/message/batch/read,data,method: post,})3.formData字段重复传型 把data换成…

经典文献阅读之--Fast and Robust Ground Surface Estimation...(均匀B样条采样快速估计地平面)

0. 简介 对于激光雷达的地面估计分割&#xff0c;目前其实有很多方法做了快速并鲁棒的分割&#xff0c;比如说我们之前写的一篇《经典文献阅读之–FEC》一文中就给出了快速分割的方案&#xff0c;当中第一步就是需要对地面进行分割。而我们这次看的是一篇使用均匀B样条的方法来…

第2关:多表查询

任务描述 join操作符编程要求测试说明 任务描述 本关任务&#xff1a; 使用join操作符实现多表查询。 join操作符 1.笛卡尔积&#xff0c;RXS 可直接转换为SQL语句 2.等值连接&#xff0c;记作 可直接转换为SQL语句 3.自然连接&#xff0c;记作 可转换为SQL语句 4.左外连接…

Java架构核心基础知识硬核整理,赶快收藏起来吧!!!

Java架构核心基础 lecture&#xff1a;波哥 一、数据结构和算法 1.数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同…

保护您的Google账号安全:检查和加固措施

简介&#xff1a;随着我们在日常生活中越来越依赖于Google账号&#xff0c;我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性&#xff0c;本文将介绍一些简单但有效的方法&#xff0c;帮助您检查和加固您的Google账号。 --- 在数字时代&am…

【工具使用】卸载VS(Visual Studio)

目录 方法一&#xff1a;使用TotalUninstaller工具方法二&#xff1a;官网的卸载方法 方法一&#xff1a;使用TotalUninstaller工具 下载地址&#xff1a;https://github.com/Microsoft/VisualStudioUninstaller/releases 1.点击下载地址&#xff0c;选择TotalUninstaller进行…