局部最小值位置

定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。 给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可。

public class Solution {
    public int getLessIndex(int[] arr) {
    	if (arr==null || arr.length==0) {
    		return -1;
    	}
    	if (arr.length==1 || arr[0]<arr[1]) {
    		return 0;
    	}
    	if (arr[arr.length-1] < arr[arr.length-2]) {
    		return arr.length-1;
    	}
    	int left = 1;
    	int right = arr.length-2;
    	while (left < right) {
    		int mid = (left+right)/2;
    		if (arr[mid] > arr[mid-1]) {
    			right = mid-1;
    		} else if (arr[mid] > arr[mid+1]) {
    			left = mid+1;
    		} else {
    			return mid;
    		}
    	}
    	return left;
    }
}

 

猜你喜欢

转载自hcx2013.iteye.com/blog/2240414