forked from super30admin/Binary-Search-2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFirstLastPositioninSortedArray.java
More file actions
64 lines (53 loc) · 1.63 KB
/
Copy pathFirstLastPositioninSortedArray.java
File metadata and controls
64 lines (53 loc) · 1.63 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
// Time Complexity : O(log n)
// Space Complexity :O(1)
// Did this code successfully run on Leetcode : Yes
// Any problem you faced while coding this : No
// Your code here along with comments explaining your approach in three sentences only
class Solution {
public int BinarySearchFirst(int[] nums , int target)
{
int low=0, high =nums.length-1;
while(low<=high)
{
int mid= low+(high-low)/2;
if(nums[mid] == target)
{
if(mid==0 || nums[mid] > nums[mid-1])
return mid;
else //keep on movingleft
high= mid-1;
}
else if(nums[mid]>target)
high=mid-1;
else
low=mid+1;
}
return -1;
}
public int BinarySearchLast(int[] nums , int target, int low, int high)
{
while(low<=high)
{
int mid= low+(high-low)/2;
if(nums[mid]==target)
{
if(mid==high|| nums[mid]<nums[mid+1])
return mid;
else //keep moving right
low=mid+1;
}
else if(nums[mid]>target)
high=mid-1;
else
low=mid+1;
}
return -1;
}
public int[] searchRange(int[] nums, int target) {
if(nums==null||nums.length==0) return new int[] {-1,-1};
int firstIndex= BinarySearchFirst(nums,target);
if(firstIndex==-1) return new int[]{-1,-1};
int secondIndex= BinarySearchLast(nums,target, firstIndex,nums.length-1);
return new int[] {firstIndex, secondIndex};
}
}