Menu
CoddyTech

Find First and Last Position of Element in Sorted Array

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

整数のリスト nums が与えられます。このリストは非減少順に並んでいるため、同じ値が繰り返し現れることがあります。また、整数 target も与えられます。0から数えた2つのインデックスのリストを返してください。target が最初に現れる位置と最後に現れる位置です。target がリストに含まれていない場合は、[-1, -1] を返してください。時間計算量は O(log n) を目指してください。

関数

searchRange(nums: integer-array, target: integer) → integer-array
numsinteger-array
値が重複する場合もある、ソート済みの整数のリスト
targetinteger
探す値
戻り値integer-array
target の最初と最後のインデックス。見つからない場合は [-1, -1]

制約

  • 1 ≤ nums.length ≤ 104
  • -104 ≤ nums[i], target ≤ 104
  • numsは非減少順に並んでいます。

例

入力
nums = [3, 5, 5, 5, 8, 9, 9, 12]target = 5
出力
[1, 3]
説明
5の3つのコピーはインデックス1、2、3にあるため、この連続部分は1から始まり、3で終わります。インデックス0には3があり、インデックス4には8があるため、これ以上続きません。
challenge icon

発展問題

同じリストに対して異なるターゲットの検索が何千回も行われる場合、あらかじめリストを1回走査しておけば、各検索をO(log n)より速くできますか?

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

テスト #1

テスト #2

引数

nums = [3, 5, 5, 5, 8, 9, 9, 12]
target = 5

期待される出力

[1, 3]