leetcode - 3244. Shortest Distance After Road Addition Queries II

Description

You are given an integer n and a 2D integer array queries.

There are n cities numbered from 0 to n - 1. Initially, there is a unidirectional road from city i to city i + 1 for all 0 <= i < n - 1.

queriesi = ui, vi represents the addition of a new unidirectional road from city ui to city vi. After each query, you need to find the length of the shortest path from city 0 to city n - 1.

There are no two queries such that queriesi0 < queriesj0 < queriesi1 < queriesj1.

Return an array answer where for each i in the range 0, queries.length - 1, answeri is the length of the shortest path from city 0 to city n - 1 after processing the first i + 1 queries.

Example 1:

复制代码
Input: n = 5, queries = [[2,4],[0,2],[0,4]]

Output: [3,2,1]

Explanation:
复制代码
After the addition of the road from 2 to 4, the length of the shortest path from 0 to 4 is 3.
复制代码
After the addition of the road from 0 to 2, the length of the shortest path from 0 to 4 is 2.
复制代码
After the addition of the road from 0 to 4, the length of the shortest path from 0 to 4 is 1.

Example 2:

复制代码
Input: n = 4, queries = [[0,3],[0,2]]

Output: [1,1]

Explanation:
复制代码
After the addition of the road from 0 to 3, the length of the shortest path from 0 to 3 is 1.
复制代码
After the addition of the road from 0 to 2, the length of the shortest path remains 1.

Solution

Similar to 3243. Shortest Distance After Road Addition Queries I, but this time with more data and an additional rule: no overlapped queries.

So we have a tricky way to solve this, because we don't have overlapped queries, so we could just drop the nodes between each query. And the length of the graph would be our answer.

Here we use a hash map to denote the graph.

Time complexity: o ( n + q ) o(n+q) o(n+q)

Space complexity: o ( n ) o(n) o(n)

Code

python3 复制代码
class Solution:
    def shortestDistanceAfterQueries(self, n: int, queries: List[List[int]]) -> List[int]:
        neighbors = {i: i + 1 for i in range(n - 1)}
        res = []
        for each_query in queries:
            start_city, end_city = each_query
            # if start_city is in the graph and the new query gives us a shorter way
            if start_city in neighbors and neighbors[start_city] < end_city:
                cur_city = neighbors[start_city]
                while cur_city < end_city:
                    cur_city = neighbors.pop(cur_city)
                neighbors[start_city] = end_city
            res.append(len(neighbors))
        return res
相关推荐
-dzk-9 分钟前
【贪心算法】LC 763.划分字母区间
算法·贪心算法
拾饵94216 分钟前
第六周第二节那个RAG工业项目遇到的问题
算法
强壮的CAT25 分钟前
VINS-Fusion 移植 ROS2 Jazzy 踩坑(一):环境与编译
人工智能·算法·机器人·自动驾驶
Omics Pro33 分钟前
计算虚拟扰动:网络毒理+虚拟敲除
数据库·人工智能·算法·机器学习·自然语言处理
yyy(十一月限定版)35 分钟前
CF2137D Replace with Occurrences
算法
谢亮_vipxieliang40 分钟前
GC 入门:G1 与 ZGC 怎么选
java·jvm·算法
杨逢昌工厂6S管理41 分钟前
107-杨逢昌钣金车间换型管控:从物料切换杂乱到有序换型的四步技术方案
经验分享·笔记·职场和发展·学习方法
兔小盈41 分钟前
有效三角形个数与和为s的两个数字
算法·双指针
海上小飞龙10 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
ychqsq10 小时前
203.诊断
经验分享·职场和发展