Menu
CoddyTech

Find Minimum in Rotated Sorted Array

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

相異なる整数のリストを昇順に並べた後、回転させました。つまり、先頭からいくつかの要素(0個の場合もあります)を取り出し、同じ順序で末尾に移動しました。たとえば、[2, 5, 9, 11, 13, 15, 17]を3つ分回転させると、[11, 13, 15, 17, 2, 5, 9]になります。回転させたリストnumsが与えられます。O(log n)時間でその最小値を返してください。

関数

findMin(nums: integer-array) → integer
numsinteger-array
回転された、重複のない整数のリスト
戻り値integer
nums 内の最小値

制約

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

例

入力
nums = [11, 13, 15, 17, 2, 5, 9]
出力
2
説明
値は11から17まで増加し、その後2まで下がります。そこで2回目の実行が始まります。探索ではインデックス3で17 > 9となるため、最小値はその右側にあります。その後、5 ≤ 9と2 ≤ 5によってhiが戻され、範囲はインデックス4のみとなり、そこには2が含まれています。

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

challenge icon

発展問題

ソートせずに、nums の k 番目に小さい値を O(log n) 時間で返せますか?

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

ケース1

ケース2

ケース3

入力

nums = [11, 13, 15, 17, 2, 5, 9]

期待値

2