Find the maximum element in an array which is first increasing and then decreasing

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值