タイトル
おそらく重複要素を有するソートされた配列、Aが、所与、ターゲット要素、xの最初と最後の出現の指標を見つけます。-1を返しますターゲットが見つからない場合。
例:
入力:A = [1,3,3,5,7,8,9,9,9,15]、目標= 9
出力:[6,8]
入力:A = [100、150、150、153]、目標= 150
出力:[1,2]
入力:A = [1,2,3,4,5,6,10]、目標= 9
出力:[-1、-1]
分析
配列がソートされているので、それは比較的簡単です。左から右に一回通過します。2Lでカーソル変数を、rは最初に記録し、最後の要素の目標位置が発生します。現在の要素が検索数を減らし、早期のリターンにターゲットより大きければ、同時に決定。
O(N)の時間複雑。
コード
class Solution:
def getRange(self, arr, target):
l, r = -1, -1
for i in range(len(arr)):
if arr[i] > target:
break
elif arr[i] == target:
if l == -1:
l = i
r = i
return [l, r]
# Test program
arr = [1, 2, 2, 2, 2, 3, 4, 7, 8, 8]
x = 2
print(Solution().getRange(arr, x))
# [1, 4]