-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearchinMountainArray.java
More file actions
81 lines (60 loc) · 1.91 KB
/
searchinMountainArray.java
File metadata and controls
81 lines (60 loc) · 1.91 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
77
78
79
80
81
public class searchinMountainArray {
public static void main(String[] args) {
int[] array={0,1,2,3,4,2,1,};//this is mountain array;
int target=3;
int index=findInMountainArray(array,target);
System.out.println(index);
}
static int findInMountainArray(int[] array,int target){
int peak=peakIndexInMountainArray(array);
int firstTry=OrderAgnosticBS(array, target,0,peak);
if(firstTry!=-1)
return firstTry;
return OrderAgnosticBS(array, target, peak, array.length-1);
}
static int peakIndexInMountainArray(int[] arr) {
int s=0;
int e=arr.length-1;
while(s<e){
int mid=s+(e-s)/2;
if(arr[mid]<arr[mid+1]){
s=mid+1;
}else if(arr[mid]>arr[mid+1]){
e=mid;
}
} return s=e;
}
static int OrderAgnosticBS(int[] arr,int target,int start,int end){
if(arr[start]<arr[end] ){
int a= AscendingBS(arr,target);
return a;
}else {
int b= DescendingBS(arr,target);
return b;
}
}
static int AscendingBS(int[] arr,int target){
int start=0;
int end=arr.length-1;
while(start<=end){
int mid=start+(end-start)/2;
if(target<arr[mid])
end=mid-1;
else if(target>arr[mid])
start=mid+1;
else return mid;
}return -1;
}
static int DescendingBS(int[] arr,int target){
int start=0;
int end=arr.length-1;
while(start<=end){
int mid=start+(end-start)/2;
if(target<arr[mid])
start=mid+1;
else if(target>arr[mid])
end=mid-1;
else return mid;
}return -1;
}
}