题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,该数组的最小值为1。
func minOfRoateArr(arr:[Int]?) -> Int? {
guard let data = arr, data.count > 0 else {
return nil
}
var indexStart:Int = 0
var indexEnd:Int = data.count-1
var indexMid = indexStart
while data[indexStart] >= data[indexEnd] {
if (indexEnd-indexStart) == 1 {
indexMid = indexEnd
break
}
indexMid = (indexStart+indexEnd)/2
if data[indexStart] == data[indexMid] && data[indexStart] == data[indexEnd] {
return self.minOfArr(arr: arr!, start: indexMid, end: indexEnd)
}
if data[indexMid] >= data[indexStart] {
indexStart = indexMid
} else if data[indexMid] <= data[indexEnd] {
indexEnd = indexMid
}
}
return data[indexMid]
}
func minOfArr(arr:[Int],start:Int,end:Int) -> Int {
var min:Int = arr[start]
for index in start...end {
if arr[index] < min {
min = arr[index]
}
}
return min
}
测试代码:
let roateArr:[Int] = [3,4,5,1,2]
let roateResult:Int? = self.minOfRoateArr(arr: roateArr)
if let minResult = roateResult {
print("FlyElephant-旋转数组中的最小值:\(minResult)")
}
let roateArr1:[Int] = [1,1,1,0,1]
let roateResult1:Int? = self.minOfRoateArr(arr: roateArr1)
if let minResult = roateResult1 {
print("FlyElephant-旋转数组中的最小值:\(minResult)")
}
输出结果:
**FlyElephant-****旋转数组中的最小值****:1**
**FlyElephant-****旋转数组中的最小值****:0**