class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# Recursive Count (counts the number of recursive exits)
RC = [0]
length = len(nums) -1
def getRange(left, right, nums):
if(left == right):
# Base case reached
return [left, right]
mid = (left + right) // 2
indices = []
# Searching for the middlle target index
if (nums[mid] == target):
indices = getRange(mid, mid, nums)
elif (nums[mid] < target):
indices = getRange(mid + 1, right, nums)
elif (nums[mid] > target):
indices = getRange(left, mid - 1, nums)
# Ripling (as the program exits the last recursive call)
if indices[0] != 0 and nums[indices[0]] - RC[0] == target:
indices[0] = indices[0] - 1
elif indices[1] != length and nums[indices[1]] + RC[0] == target:
indices[1] = indices[1] + 1
RC[0] = RC[0] + 1
return indices
return getRange(0, length, nums)
target = 8
for lst in ([5,7,7,8,8,10], []):
try:
ans = Solution().searchRange(lst, target)
print(f"Solution for {lst}, {target} is {ans}")
except Exception as e:
print(f"Exception for {lst}, {target}: {e}")
Y2xhc3MgU29sdXRpb24ob2JqZWN0KToKICAgIGRlZiBzZWFyY2hSYW5nZShzZWxmLCBudW1zLCB0YXJnZXQpOgogICAgICAgICIiIgogICAgICAgIDp0eXBlIG51bXM6IExpc3RbaW50XQogICAgICAgIDp0eXBlIHRhcmdldDogaW50CiAgICAgICAgOnJ0eXBlOiBMaXN0W2ludF0KICAgICAgICAiIiIKCiAgICAgICAgIyBSZWN1cnNpdmUgQ291bnQgKGNvdW50cyB0aGUgbnVtYmVyIG9mIHJlY3Vyc2l2ZSBleGl0cykKICAgICAgICBSQyA9IFswXQogICAgICAgIGxlbmd0aCA9IGxlbihudW1zKSAtMQoKICAgICAgICBkZWYgZ2V0UmFuZ2UobGVmdCwgcmlnaHQsIG51bXMpOgogICAgICAgICAgICBpZihsZWZ0ID09IHJpZ2h0KToKICAgICAgICAgICAgICAgICMgQmFzZSBjYXNlIHJlYWNoZWQKICAgICAgICAgICAgICAgIHJldHVybiBbbGVmdCwgcmlnaHRdCgogICAgICAgICAgICBtaWQgPSAobGVmdCArIHJpZ2h0KSAvLyAyCiAgICAgICAgICAgIGluZGljZXMgPSBbXQoKICAgICAgICAgICAgIyBTZWFyY2hpbmcgZm9yIHRoZSBtaWRkbGxlIHRhcmdldCBpbmRleAogICAgICAgICAgICBpZiAobnVtc1ttaWRdID09IHRhcmdldCk6CiAgICAgICAgICAgICAgICBpbmRpY2VzID0gZ2V0UmFuZ2UobWlkLCBtaWQsIG51bXMpCiAgICAgICAgICAgIGVsaWYgKG51bXNbbWlkXSA8IHRhcmdldCk6CiAgICAgICAgICAgICAgICBpbmRpY2VzID0gZ2V0UmFuZ2UobWlkICsgMSwgcmlnaHQsIG51bXMpCiAgICAgICAgICAgIGVsaWYgKG51bXNbbWlkXSA+IHRhcmdldCk6CiAgICAgICAgICAgICAgICBpbmRpY2VzID0gZ2V0UmFuZ2UobGVmdCwgbWlkIC0gMSwgbnVtcykKICAgICAgICAgICAgCiAgICAgICAgICAgICMgUmlwbGluZyAoYXMgdGhlIHByb2dyYW0gZXhpdHMgdGhlIGxhc3QgcmVjdXJzaXZlIGNhbGwpCiAgICAgICAgICAgIGlmICBpbmRpY2VzWzBdICE9IDAgYW5kIG51bXNbaW5kaWNlc1swXV0gLSBSQ1swXSA9PSB0YXJnZXQ6CiAgICAgICAgICAgICAgICBpbmRpY2VzWzBdID0gaW5kaWNlc1swXSAtIDEKICAgICAgICAgICAgZWxpZiBpbmRpY2VzWzFdICE9IGxlbmd0aCBhbmQgbnVtc1tpbmRpY2VzWzFdXSArIFJDWzBdID09IHRhcmdldDoKICAgICAgICAgICAgICAgIGluZGljZXNbMV0gPSBpbmRpY2VzWzFdICsgMQoKICAgICAgICAgICAgUkNbMF0gPSBSQ1swXSArIDEKICAgICAgICAgICAgcmV0dXJuIGluZGljZXMKCiAgICAgICAgcmV0dXJuIGdldFJhbmdlKDAsIGxlbmd0aCwgbnVtcykKCnRhcmdldCA9IDgKZm9yIGxzdCBpbiAoWzUsNyw3LDgsOCwxMF0sIFtdKToKCXRyeToKCQlhbnMgPSBTb2x1dGlvbigpLnNlYXJjaFJhbmdlKGxzdCwgdGFyZ2V0KQoJCXByaW50KGYiU29sdXRpb24gZm9yIHtsc3R9LCB7dGFyZ2V0fSBpcyB7YW5zfSIpCglleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJcHJpbnQoZiJFeGNlcHRpb24gZm9yIHtsc3R9LCB7dGFyZ2V0fToge2V9Iik=