题解方法
二分查找
- 序列变为分段有序,第一段序列的数值均大于 nums[0],第二段则反之
- 当旋转点使得相同的数值发生分裂,则上述特性失效,故需要预处理,左移右边界
- 特殊考虑旋转了 0 个数值的情况,即本身有序
核心代码
二分查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| while (l < r && numbers[r] == numbers[0]) { r--; }
while (l < r) { int mid = l + (r - l) / 2; if (numbers[mid] < numbers[0]) { r = mid; } else { l = mid + 1; } }
return Math.min(numbers[l], numbers[0]);
|
题目来源
剑指 Offer 11. 旋转数组的最小数字 - 力扣(LeetCode)