【问题标题】:Finding median for given range of indices of an array查找给定数组索引范围的中位数
【发布时间】:2016-10-17 04:38:56
【问题描述】:

给定一个整数数组,我们必须回答某些查询,其中每个查询都有 2 个整数。这 2 个整数是给定数组的 2 个索引,我们必须找到 2 个索引(包括给定索引)之间存在的数字的中位数。

对每个查询的数组进行排序是最基本的解决方案。这可以借助分段树或范围查询来解决吗?

【问题讨论】:

  • 好吧,我想不出任何比暴力解决方案更复杂的方法,暴力解决方案涉及对每个查询的数组进行排序。所以目前我没有任何代码sn-p。
  • 好吧,对于那些对这个问题投了反对票的用户,你能告诉我这样做的理由吗,因为我无法理解它有什么问题。

标签: algorithm median


【解决方案1】:

以下是在 Python 中执行此操作的方法:

将 numpy 导入为 np

def median(arr):

    arr_sort = sorted(arr)
    n = len(arr)
    n_over_two = int(n/2)
    if (n%2 == 0):
        return (arr_sort[n_over_two-1]+arr_sort[n_over_two])/2.0
    else:
        return arr_sort[n_over_two]

tmp = [5,4,3,2,1]
print(median(tmp))

tmp = [2,10,2,10,7]
print(median(tmp))

tmp = [4, 3, 2, 1]
print(median(tmp))

这适用于任何数组。取数组子集的中位数只涉及在 python 中对该数组的标准索引(包括下索引,不包括上索引 - 如果要包括上索引,则添加一个):

anArray=[0,0,0,1,2,3,4,10,10,10,10]
print(anArray[3:7])
print(median(anArray[3:7]))

【讨论】:

  • 那么上面的蛮力解决方案具有非最优时间复杂度。您是否有任何与范围查询相关的想法以提高时间复杂度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多