-
Notifications
You must be signed in to change notification settings - Fork 265
/
034 Search Insert Position.py
76 lines (66 loc) · 2 KB
/
034 Search Insert Position.py
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it
would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 -> 2
[1,3,5,6], 2 -> 1
[1,3,5,6], 7 -> 4
[1,3,5,6], 0 -> 0
"""
__author__ = 'Danyang'
class Solution:
def searchInsert_complex(self, A, target):
"""
binary search
iterative solution
:param A: a list of integers
:param target: an integer to be inserted
:return: integer
"""
length = len(A)
if not A or length==0:
return 0
start = 0
end = length -1
# while start<=end:
while True:
mid = (start+end)/2
if target==A[mid]:
return mid
elif target<A[mid]:
end = mid-1
if not start<=end:
# return end if end>=0 else 0
return mid if mid>=0 else 0
else:
start = mid+1
if not start<=end:
return start
def searchInsert(self, A, target):
"""
binary search
iterative solution
:param A: a list of integers
:param target: an integer to be inserted
:return: integer
"""
length = len(A)
if not A or length==0:
return 0
start = 0
end = length
while start<end:
mid = (start + end) / 2
if target==A[mid]:
return mid
elif target<A[mid]:
end = mid
else:
start = mid + 1
return start
if __name__=="__main__":
assert Solution().searchInsert([1, 3, 5, 6], 5)==2
assert Solution().searchInsert([1, 3, 5, 6], 2)==1
assert Solution().searchInsert([1, 3, 5, 6], 7)==4
assert Solution().searchInsert([1, 3, 5, 6], 0)==0