zoukankan      html  css  js  c++  java
  • [LeetCode] 1257. Smallest Common Region

    You are given some lists of regions where the first region of each list includes all other regions in that list.

    Naturally, if a region X contains another region Y then X is bigger than Y. Also by definition a region X contains itself.

    Given two regions region1region2, find out the smallest region that contains both of them.

    If you are given regions r1r2 and r3 such that r1 includes r3, it is guaranteed there is no r2 such that r2 includes r3.

    It's guaranteed the smallest region exists.

    Example 1:

    Input:
    regions = [["Earth","North America","South America"],
    ["North America","United States","Canada"],
    ["United States","New York","Boston"],
    ["Canada","Ontario","Quebec"],
    ["South America","Brazil"]],
    region1 = "Quebec",
    region2 = "New York"
    Output: "North America"

    Constraints:

    • 2 <= regions.length <= 10^4
    • region1 != region2
    • All strings consist of English letters and spaces with at most 20 letters.

    最小公共区域。

    给你一些区域列表 regions ,每个列表的第一个区域都包含这个列表内所有其他区域。

    很自然地,如果区域 X 包含区域 Y ,那么区域 X  比区域 Y 大。

    给定两个区域 region1 和 region2 ,找到同时包含这两个区域的 最小 区域。

    如果区域列表中 r1 包含 r2 和 r3 ,那么数据保证 r2 不会包含 r3 。

    数据同样保证最小公共区域一定存在。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/smallest-common-region
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    这道题跟235,236题很像,找的是两个 region 的最小公共祖先。那么这里我们需要一个hashmap<String, String> 记录每个 region 和他的父节点。同时我们还需要一个 hashset 记录有哪些 region 被访问过。首先我们用 hashmap 记录每个 region 和他的父节点,记录好了之后,对于 region1 ,我们开始执行 DFS,用 hashset 记录好 region1 的每一个父节点,直到无法遍历为止。

    此时我们再从 region2 开始做 DFS 遍历去找 region2 的父节点。如果当前找到的这个父节点不存在于 hashset,就接着再往上一层找;如果在 hashset 里找到了 region2 的父节点,说明这个父节点就是 region1 和 region2 的最小公共祖先。

    时间O(n^2)

    空间O(n)

    Java实现

     1 class Solution {
     2     public String findSmallestRegion(List<List<String>> regions, String region1, String region2) {
     3         HashMap<String, String> map = new HashMap<>();
     4         HashSet<String> set = new HashSet<>();
     5         for (List<String> r : regions) {
     6             for (int i = 1; i < r.size(); i++) {
     7                 map.put(r.get(i), r.get(0));
     8             }
     9         }
    10 
    11         while (region1 != null) {
    12             set.add(region1);
    13             region1 = map.get(region1);
    14         }
    15         while (!set.contains(region2)) {
    16             region2 = map.get(region2);
    17         }
    18         return region2;
    19     }
    20 }

    相关题目

    235. Lowest Common Ancestor of a Binary Search Tree

    236. Lowest Common Ancestor of a Binary Tree

    865. Smallest Subtree with all the Deepest Nodes

    1257. Smallest Common Region

    LeetCode 题目总结

  • 相关阅读:
    大数据学习之路(持续更新中...)
    大数据之Yarn——Capacity调度器概念以及配置
    大数据之Oozie——源码分析(一)程序入口
    《结网》—— 读后总结
    [大数据之Yarn]——资源调度浅学
    Java程序员的日常—— FileUtils工具类的使用
    Oracle 11g透明网关连接Sqlserver 2000
    Python3中通过fake_useragent生成随机UserAgent
    Python导入 from lxml import etree 导入不了
    ModuleNotFoundError: No module named 'pymysql'
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14966177.html
Copyright © 2011-2022 走看看