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
説明
最初の中央の要素であるインデックス3には2があり、右半分の[2, 5, 8, 11]はソート済みで、5を含んでいます。次の中央の要素であるインデックス5には8があり、ソート済みの左側部分[5, 8]には5が含まれているため、インデックス4に進みます。
challenge icon

発展問題

numsに重複が含まれる可能性がある場合、どのアルゴリズムもO(log n)を保証できません。単一の0を隠す、1だけからなる回転リストを使って証明できますか?

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

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

4