Menu
CoddyTech

Search in Rotated Sorted Array

ふつう二分探索python iconjava iconcpp iconc iconjs icon+10

相異なる整数のリストが昇順に並べられた後、回転されています。つまり、先頭から任意の数の要素(0個の場合もあります)を取り出し、同じ順序のまま末尾に移動しています。たとえば、[2, 5, 8, 11, 15, 19, 23]を4つ分回転すると、[15, 19, 23, 2, 5, 8, 11]になります。回転されたリストnumsと整数targetが与えられます。targetがnumsにある場合は、0から数えたインデックスを返し、ない場合は-1を返してください。計算量はO(log n)としてください。

関数

search(nums: integer-array, target: integer) → integer
numsinteger-array
回転された、重複のない整数のソート済みリスト
targetinteger
探す値
戻り値integer
nums 内の target のインデックス。存在しない場合は -1

制約

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • すべてのnumsの値はそれぞれ異なります。
  • nums は、ある k だけ回転された昇順リストです(0 ≤ k < nums.length)。k = 0 の場合は回転されていません。

例

入力
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
出力
4
説明
5 はインデックス 4 にあります。最初の中央の要素であるインデックス 3 には 2 があるため、右半分の [2, 5, 8, 11] はソート済みで、5 は 2 と 11 の間にあります。次の中央の要素であるインデックス 5 には 8 があります。ソート済みの左部分 [5, 8] には 5 があるため、インデックス 4 にたどり着きます。

lock icon提出時に隠しテスト+23件

challenge icon

発展問題

numsに重複が含まれる可能性がある場合、O(log n)を保証できるアルゴリズムはありません。それを証明できますか?1が並んだリストを回転させ、その中に0を1つだけ隠したものを作りましょう。0を探すには、すべての要素を読み取らなければならないようにします。

コードをリセット
def search(nums, target):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

ケース3

入力

nums = [15, 19, 23, 2, 5, 8, 11]
target = 5

期待値

4