2016-10-17 14 views
-3

整数の配列が与えられたとき、各クエリが2つの整数を持つ特定のクエリに答える必要があります。これらの2つの整数は、与えられた配列の2つのインデックスであり、2つのインデックスの間に存在する数値の中央値を見つける必要があります(与えられたインデックスを含みます)。配列のインデックスの与えられた範囲の中央値を求める

各クエリの配列をうまくソートするのが最も基本的な解決方法です。これは、セグメントツリーや範囲クエリの助けを借りて解決できますか?ここで

+0

さて、私はすることができません各クエリの配列をソートすることを含むブルートフォースのソリューションよりも複雑なものを考えてください。だから私は現在、コードスニペットを持っていません。 – P3A

+0

質問を投票したすべてのユーザーにとって、何が間違っているのか理解できないため、私はその理由を教えてくれますか? – P3A

答えて

0

はPythonでこれを実行する方法は次のとおりです。

輸入numpyの。これは、任意の配列のために働く

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)) 

NPとして。 (上の排他的な低い屈折率を含め、 - あなたは、上の包括的なをしたい場合は、1を追加します)だけのpythonでその配列の標準インデックスを伴う配列のサブセットの中央値を取る:

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

上記のブルートフォースの解は、最適でない時間の複雑さを持っています。あなたは時間の複雑さを改善するための範囲のクエリに関連する考えを持っていますか? – P3A

関連する問題