Wayfair
  • OA
    • Karat
      • 811. Subdomain Visit Count
      • Ads Conversion Rate
      • Recommend Movie
      • Longest Common Continuous Subarray
      • Course Overlap
      • Halfway courses
      • Find one rectangle
      • Find all rectangles
      • Find Multiple Shapes
      • word wrap
      • word processor
      • Basic Calculator
      • Basic Calculator with parenthesis
      • 带变量计算器
      • Valid Matrix
      • nonogram
      • Node with 0 or 1 parents
      • 两个节点是否有公共祖先
      • 最远祖先
      • invalid Badge Records
      • 一小时内access多次
      • canSchedule
      • spareTime
      • sparse vector
      • sparse vector 实现add,dot和cos
      • userlogs earliest and latest access time
      • resource Access with in 5 min
      • Find Word Path in Grid
      • Find legal moves
      • 找能去的所有0区域
      • 最短路径找treasure
  • VO
    • Coding
      • Valid Palindrome
      • Add String
      • Coupon
    • System design
    • BQ
    • OOD
  • SD
  • LeetCode Tag
  • VO Onsite
Powered by GitBook
On this page
  1. OA
  2. Karat

最远祖先

1 2 3 / \ / 4 5 6 7

输入是int[][] input, input[0]是input[1] 的parent,比如 {{1,4}, {1,5}, {2,5}, {3,6}, {6,7}}会形成上面的图

第一问是只有0个parents和只有1个parent的节点

第二问是 两个指定的点有没有公共祖先 bfs/dfs

第三问是就一个点的最远祖先,如果有好几个就只需要输出一个就好,举个栗子,这里5的最远祖先可以是1或者2,输出任意一个就可以 bfs

 public int findEarliestAncestor(int[][] edges, int node)
    {
        Map<Integer, Set<Integer>> map = new HashMap<>();
        for(int i = 0; i< edges.length; i++)
        {
            int parent  = edges[i][0];
            int child = edges[i][1];
            map.putIfAbsent(child, new HashSet<Integer>());
            map.get(child).add(parent);
        }

        Queue<Integer> queue = new LinkedList<>();
        Set<Integer> path = new HashSet<Integer>();
        queue.offer(node);
        path.add(node);

        int earliestAncestor = node;
        while(!queue.isEmpty())
        {
            int size = queue.size();
            for(int i = 0; i< size; i++)
            {
                int current = queue.poll();
                earliestAncestor = current;
                for(Integer nextElement: map.get(current))
                {
                    if(!path.contains(nextElement))
                    {
                        queue.offer(nextElement);
                        path.add(nextElement);
                    }
                }
            }
        }
        return earliestAncestor;   
    }
Previous两个节点是否有公共祖先Nextinvalid Badge Records

Last updated 3 years ago