18. Find the Highest number
The problem can be found at the following link: Question Link
My Approach
Initialize size as the size of the input vector a.
Set low to 0 and high to size - 1.
Enter a while loop that continues as long as low <= high.
Calculate mid as (low + high) / 2.
If a[mid] is greater than a[mid-1] and a[mid+1], return a[mid].
If a[mid] is greater than a[mid-1] but less than a[mid+1], set low to mid + 1.
Otherwise, set high to mid - 1.
If no peak element is found, return a[size - 1].
Time and Auxiliary Space Complexity
Time Complexity: The time complexity of this approach is
O(logN)
, where N is the number of elements in the array.Auxiliary Space Complexity: The auxiliary space complexity is
O(1)
.
Code (C++)
class Solution {
public:
int findPeakElement(vector<int>& a)
{
int size=a.size();
int low=0, high=size-1;
while (low<=high)
{
int mid=(low+high)/2;
if (a[mid]>a[mid-1] && a[mid]>a[mid+1])
return a[mid];
else if (a[mid]>a[mid-1] && a[mid]<a[mid+1])
low=mid+1;
else high=mid-1;
}
return a[size-1];
}
};
Contribution and Support
For discussions, questions, or doubts related to this solution, please visit our discussion section. We welcome your input and aim to foster a collaborative learning environment.
If you find this solution helpful, consider supporting us by giving a ⭐ star to the getlost01/gfg-potd repository.
Last updated
Was this helpful?