2016-04-09 8 views
-2

長さnのリストが与えられた場合、リストの中で最も大きな数字のインデックスをO(log(n) Pythonのinbuilt maxメソッドを使用せずに。以下は私の試みは、私は自分のコードを実行したときしかし、私はラインPythonコードのValueErrorでリスト内の最大数のインデックスを見つけようとしています

return n.index(find_max_number(n)) 

にエラー

ValueError: 0 is not in list 

を取得し、です。私のコードと代替ソリューションに関するフィードバックは高く評価されます。

def find_maximum(n): 
     b = find_max_number(n) 
     return n.index(b) 

    def find_max_number(n): 
      middle = len(n)//2 
      if len(n) == 1 : 
       return (n[0]) 
      if len(n)>2: 
       if n[middle] > n[middle-1] and n[middle] > n[middle+1] : 
       return (n[middle]) 
      if (n[middle-1] < n[middle]): 
       return find_maximum(n[middle:]) 
      else : 
       return find_maximum(n[:middle]) 
+1

シェア:また

def find_max_number(numbers): max_ = float('-inf') for number in numbers: if number > max_: max_ = number return max_ 

、あなたは直接、インデックスのために行くことができます。また、代替ソリューションに興味がありますか、または既存のコードを修正する目標ですか? – timgeb

+0

どのようなエラーが表示されますか?詳細を追加してください。 –

+1

'max()'を使用しない理由は何ですか? – DeepSpace

答えて

1

ちょうどあなたがインデックスを取得していたよう.index()を使用し、その後、リスト中の最大数を見つけるために、代わりにPythonのmaxを使用しています。

3 

アウト

コード

n = [2, 3, 4, 5] 

def greatest_num_index(n): 
    return n.index(max(n)) 

print(greatest_num_index(n)) 

あなたの最高を使用することを許可されていない場合:

def max_num(n): 
    greatest_num = 0 
    for item in n: 
     if item > greatest_num: 
      greatest_num = item 
    return greatest_num 

これはで動作しますlistの各要素を調べ、現在の最大数よりも大きいかどうかをテストし、最大であれば現在の数値に設定します。あなたは少しあなたの機能find_max_numberを簡素化することができます

+0

maxメソッドを使わないでfuncを書く必要があります – asdf

+1

あなたの質問にそれを入れてください:) – Signal

+2

@asdfあなたの質問をしてから追加の要件を追加しないでください。新しい/異なる質問がある場合は、新しい質問をしてください。誰かがあなたを助けようとして元の質問の文脈で正しい答えを与えた後にルールを変更することは非常に面倒です。 – timgeb

1

:それはうまくいかないと、なぜそれがうまくいかない方法を私たちに

def find_maximum(numbers): 
    max_ = float('-inf') 
    max_index = None 
    for index, number in enumerate(numbers): 
     if number > max_: 
      max_ = number 
      max_index = index 
    return max_index 
関連する問題