Find local minima in an array

后端 未结 7 1591
时光说笑
时光说笑 2020-12-04 09:56

Given an array of integers, find the local minima. An element A[i] is defined as a local minimum if A[i-1] > A[i] and A[i] < A[i+1] where i = 1...n-2. In case of boundar

7条回答
  •  一生所求
    2020-12-04 10:32

    Here is a solution that works on O(log n). Basically, this works on the merge sort approach (divide and conquer).

    public class LocalMaxima {
        int []a = {5,8,10,25,6,3,44,51,55,56,57,58,34,5,59};
    
        @Test 
        public  void localMaxima () {
            System.out.println((a[localMaxima(0,a.length-1)]));
        }
    
        int localMaxima(int low, int high) {
            if(high-low > 2) {
                int mid = (low+high)/2;
                return maxof(localMaxima(low,mid),localMaxima(mid+1, high));
            }
            else if(high-low == 1) {
                return maxof(high,low);
            }
            else if(high-low == 0) {
                return high;
            }
            if(high-low == 2) {
                return maxof(maxof(low, high),low+1);
            }
            return 0;
        }
    
        int maxof(int i, int j) {
            if(a[i] 

提交回复
热议问题