描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
示例
输入:
[3,4,5,1,2]
返回值:
1
代码实现
/**
* 旋转数组的最小数字
*
* @param rotateArray int整型一维数组
* @return int整型
*/
func minNumberInRotateArray(rotateArray []int) int {
// 边界值处理
if len(rotateArray) == 0 {
return 0
}
if len(rotateArray) == 1 {
return rotateArray[0]
}
// 初始化中间变量
var mid int
// 定义左右变量
left, right := 0, len(rotateArray) - 1
for rotateArray[left] >= rotateArray[right] {
// 退出条件
if (right - left) == 1 {
mid = right
break
}
// 中间变量
mid = (left + right) / 2
if rotateArray[mid] > rotateArray[right] {// 中间值大于最右侧值,说明最小值在右侧
left = mid
} else if rotateArray[mid] < rotateArray[right] {// 中间值小于最右侧值,说明最小值在左侧
right = mid
} else {
right--
}
}
return rotateArray[mid]
}
思路
由题意,非递减排序的数组即为递增数组,所以本题输入是一个递增数组的旋转
第一种做法比较简单,可以使用暴力法,更优的解法是二分法
还不快抢沙发