寻找旋转排序数组中的最小值:ACM 模式刷题
按标准输入读取测试数据,输出结果后可在 CodeACM 在线运行和提交。
题目描述
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
· 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
· 若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。
输入格式
第一行输入 n,第二行输入 n 个轮转后的整数。
输出格式
输出数组中的最小元素。
数据范围
- 1 ≤ n ≤ 5000
- −5000 ≤ nums[i] ≤ 5000
- 所有元素互不相同
公开样例
样例 1
输入
5 3 4 5 1 2
输出
1
原数组为 [1,2,3,4,5],向右轮转 3 次后得到输入数组,最小值 1 出现在旋转点。
样例 2
输入
4 11 13 15 17
输出
11
数组 [11,13,15,17] 本身已经有序,可以视为轮转了整数个周期,最小值即为首元素 11。
练习建议
先根据输入输出格式写出可运行程序,再用公开样例检查结果;遇到边界情况时,补充自测用例后提交。