Leetcode 1257. Smallest Common Region
Build family tree from offsprings to their parents;
Use a HashSet to construct ancestry history of region1;
Retrieve ancestry of region2 by family tree till find the first common ancestry in ancestry history of region1.
public String findSmallestRegion(List<List<String>> regions, String region1, String region2) {
Map<String, String> parents = new HashMap<>();
Set<String> ancestryHistory = new HashSet<>();
for (List<String> region : regions)
for (int i = 1; i < region.size(); ++i)
parents.put(region.get(i), region.get(0));
while (region1 != null) {
ancestryHistory.add(region1);
region1 = parents.get(region1);
}
while (!ancestryHistory.contains(region2))
region2 = parents.get(region2);
return region2;
}

本文深入解析LeetCode1257题目的解决方案,通过构建家族树来追溯子区域到其父区域的关系,利用HashSet记录区域1的祖先历史,再通过家族树检索区域2直到找到第一个共同祖先,实现高效查找最小公共区域。

被折叠的 条评论
为什么被折叠?



