线性时间算法

时间:2014-02-26 04:13:05

标签: algorithm

我的电话采访问题:

公司有两个部门。 A部门有员工E1,E2和E3。 B部门有员工E4,E5和E1。我必须列出A部门中不在B部门的所有员工,即我必须将部门A归还给E2,E3。我使用SQL连接查询解决了它。在线性时间O(n)或对数时间O(log n)中解决此问题的最佳算法是什么?

2 个答案:

答案 0 :(得分:1)

以下是 O(n) 的算法:

  1. 找到员工人数[O(n)]
  2. 为每个部门创建一个字符串,如以下示例[O(n)]
  3. 所示
  4. xor两个字符串prev。步骤
  5. 不是结果
  6. xor结果与字符串对应dept。 A
  7. 宾果! (只需将字符串转换为设置
  8. 示例:

    e1 e2 e3
    e5 e1 e4
    11100个
    10011个
    ----- xor
    01111
    -----不是 10000个
    11100 xor
    -----
    01100

答案 1 :(得分:1)

  1. 为listB构建Hashtable(E4,E5和E1),取O(n)
  2. 在散列表中逐个检查列表A(E4,E5和E1)项目,捕获在散列表中找不到的项目。(每次搜索取O(1),总时间为nO(1)= O(n) )
  3. 总O(n)+ O(n)= O(n)