📜  门|门CS 2008 |第 40 题

📅  最后修改于: 2021-09-24 05:34:44             🧑  作者: Mango

确定一个整数在 n 个整数的排序数组中是否出现超过 n/2 次所需的最小比较次数是

(A) Θ(n)
(B) Θ(logn)
(C) Θ(log*n)
(D) Θ(1)答案:(乙)
解释:如果你回答了 Theta(1),那么想想例子 {1, 2, 2, 2, 4, 4}, {1, 1, 2, 2, 2, 2, 3, 3}

找出整数在 n 个整数的排序数组(升序)中是否出现超过 n/2 次的最佳方法是二进制搜索方法。

  1. 可以使用分治技术在 O(log(n)) 时间内找到元素的第一次出现,假设它是 i。
  2. 使用分治技术可以在 O(log(n)) 时间内找到元素的最后一次出现,假设它是 j。
  3. 现在该元素的出现次数(计数)是(j-i+1)。总时间复杂度 = log n +log n +1 = O(logn)

请参阅检查排序数组中的多数元素

此解决方案由Nirmal Bharadwaj 提供
这个问题的测验