-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path33_Search_in_Rotated_Sorted_Array.py
54 lines (46 loc) · 1.6 KB
/
33_Search_in_Rotated_Sorted_Array.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
class Solution:
def search(self, nums: List[int], target: int) -> int:
index =-1
for i in range(len(nums)):
if target == nums[i]:
index = i
break
return index
'''
##Alternative Solution
class Solution:
def search(self, nums: List[int], target: int) -> int:
pivot = self.pivotPosition(nums,0,len(nums)-1)
if(pivot ==-1):
return self.binarySearch(nums,0,len(nums)-1,target)
elif(target == nums[pivot]):
return pivot
#elif target<=nums[-1]:
#index= self.binarySearch(nums,pivot+1,len(nums)-1,target)
elif target>=nums[0]:
return self.binarySearch(nums,0,pivot-1,target)
return self.binarySearch(nums,pivot+1,len(nums)-1,target)
def pivotPosition(self,nums,low,high):
if high<low:
return -1
if high==low:
return low
mid = (high+low)//2
if(mid<high and nums[mid]>nums[mid+1]):
return mid
if(mid>low and nums[mid]<nums[mid-1]):
return mid-1
if(nums[mid]<=nums[low]):
return self.pivotPosition(nums,low,mid-1)
return self.pivotPosition(nums,mid+1,high)
def binarySearch(self,nums,low,high,target):
if high<low:
return -1
mid = (high+low)//2
if(nums[mid]==target):
return mid
elif(nums[mid]>target):
return self.binarySearch(nums,low,mid-1,target)
else:
return self.binarySearch(nums,mid+1,high,target)
'''