算法刷题(3)--旋转数组的最小数字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37770023/article/details/79945241

算法刷题(3)--旋转数组的最小数字


package p1;

/**
 * 旋转数组的最小数字
 * 题目描述:
 * 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
 * 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 
 * 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
 * NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
 * @author Guozhu Zhu
 * @date 2018/4/14
 * @vesion 1.0
 */
public class Test03 {
    
	public static void main(String args[]) {
		int[] arr = {3, 4, 5, 1, 2};
		System.out.println(minNumberInRotateArray(arr));
	}
	
	public  static int minNumberInRotateArray(int arr[]) {
	    if (arr.length == 0) {
	    	return 0;
	    }
	    minInsertSort(arr);
	    return arr[0];    
	}
	
	/*
	 * 二分插入排序
	 */
	public static void minInsertSort(int arr[]) {
		for (int i = 1; i < arr.length; i++) {
			int temp = arr[i];
			int low = 0;
			int high = i-1;
			int mid;
			while (low <= high) {
				mid = (low+high)/2;
				if (arr[mid] > temp) {
					high = mid-1;
				} else {
					low = mid+1;
				}
			}
			for (int j = i-1; j >= low; j--) {
				arr[j+1] = arr[j];
			}
			arr[low] = temp; //插入元素
		}
	}
	
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页