1. 程式人生 > >3.6 旋轉陣列的最小數字

3.6 旋轉陣列的最小數字

旋轉陣列的最小數字

把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
方法一: 整體遍歷
int minNumberInRotateArray(vector<int> rotateArray) {
	int minVal = 0;
	if(rotateArray.size() <=0){
		return minVal;
	}
	int start = rotateArray.size() -1;
	minVal = rotateArray[start];
	for( start-=1;start>=0;start--){
		if(minVal > rotateArray[start]){
			minVal = rotateArray[start];
		}
	}
	return minVal;
}
測試方法一:

在這裡插入圖片描述

方法二: 二分查詢(條件:原陣列有序)
int minNumberInRotateArray(vector<int> rotateArray) {
	if (rotateArray.size()<=0){
		return 0;
	}
	int left = 0;
	int right = rotateArray.size() - 1;
	int mid = -1;
	while(rotateArray[left] >= rotateArray[right]){
		if(right -left == 1){
			mid = right;
			break;
		}
		mid = left+(right - left)/2;
		if(rotateArray[mid] >= rotateArray[left]){
			left = mid;
		}
		if(rotateArray[mid]<=rotateArray[right]){
			right = mid;
		}
	}
	return rotateArray[mid];
}
測試方法二:

在這裡插入圖片描述