-
Notifications
You must be signed in to change notification settings - Fork 260
Expand file tree
/
Copy path034 Search Insert Position.py
More file actions
76 lines (66 loc) · 2 KB
/
034 Search Insert Position.py
File metadata and controls
76 lines (66 loc) · 2 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
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