Examples :
Input: arr[] = {1, 3, 50, 10, 9, 7, 6}
Output: 50
Method 1 (Linear Search)
public class FindMaximum {
static int findMaximum(int arr[], int low, int high) {
int max = arr[low];
int i;
for (i = low; i <= high; i++) {
if (arr[i] > max)
max = arr[i];
}
return max;
}
public static void main(String[] args) {
int arr[] = {1, 30, 40, 50, 60, 70, 23, 20};
int n = arr.length;
System.out.println("The maximum element is " + findMaximum(arr, 0, n - 1));
}
}
Output:
The maximum element is 70
Method 2 (Binary Search)
public class FindMaximum {
static int findMaximum(int arr[], int low, int high) {
/* Base Case: Only one element is
present in arr[low..high]*/
if (low == high)
return arr[low];
/* If there are two elements and
first is greater then the first
element is maximum */
if ((high == low + 1) && arr[low] >= arr[high])
return arr[low];
/* If there are two elements and
second is greater then the second
element is maximum */
if ((high == low + 1) && arr[low] < arr[high])
return arr[high];
/*low + (high - low)/2;*/
int mid = (low + high) / 2;
/* If we reach a point where arr[mid]
is greater than both of its adjacent
elements arr[mid-1] and arr[mid+1],
then arr[mid] is the maximum element*/
if (arr[mid] > arr[mid + 1] && arr[mid] > arr[mid - 1])
return arr[mid];
/* If arr[mid] is greater than the next
element and smaller than the previous
element then maximum lies on left side
of mid */
if (arr[mid] > arr[mid + 1] && arr[mid] < arr[mid - 1])
return findMaximum(arr, low, mid - 1);
else
return findMaximum(arr, mid + 1, high);
}
// main function
public static void main(String[] args) {
int arr[] = {1, 3, 50, 10, 9, 7, 6};
int n = arr.length;
System.out.println("The maximum element is " + findMaximum(arr, 0, n - 1));
}
}
Output:
The maximum element is 50