-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path34.FindFirstLastPositonOfSortedArray.py
More file actions
46 lines (43 loc) · 1.27 KB
/
34.FindFirstLastPositonOfSortedArray.py
File metadata and controls
46 lines (43 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
:note:
分三步走,首先二分查找判断是否能够找到,然后二分查找target-0.5和target+0.5
"""
#target = 7
l = len(nums)
if l == 0:
return [-1, -1]
start = target - 0.5
end = target + 0.5
isFind = self.bsearchPos(nums, target, 1)
if isFind == -1:
return [-1, -1]
else:
startPos = self.bsearchPos(nums, start, 2)
endPos = self.bsearchPos(nums, end, 3)
return [startPos, endPos]
def bsearchPos(self, nums, target, findType):
# findType = 1 find target, = 2 find start, = 3 find end
l = len(nums)
if l == 0:
return -1
i, j = 0, l-1
while(i<=j):
m = (i+j)/2
if target > nums[m]:
i = m+1
elif target < nums[m]:
j = m-1
else:
return m
# not find
if findType == 1:
return -1
elif findType == 2:
return max(i, j)
else:
return min(i, j)