#3841. 兔猫信奥学院的“重复旋转”-提高
兔猫信奥学院的“重复旋转”-提高
🏫 题目名称:兔猫信奥学院的“重复旋转”寻找最小刻度
🐰🐱 题目描述
在兔猫信奥学院的天文观测台上,刻着一排神秘的星辰刻度——原本它们按从小到大的顺序排列,可被调皮的小兔作弄,用时空魔法对它们进行了若干次旋转。更棘手的是,有些刻度编号重复出现,多次旋转后,它们更是混乱重叠。
加菲老师对小猫说:
“给你这条被旋转过、且可能含有重复刻度值的数字序列
nums
。它原本是一个严格非降序(允许相邻相等)且互不相同编号组经 1 到 n 次旋转得到(旋转 n 次相当于未旋转)。请你用尽量少的步骤——理想中是 (O(\log n)) 平均或最坏情况下 \(\;O(n)\)\^- 级别——找出这条刻度带上的最小值(即原数组的首元素)。”
小猫思索道:“有了重复元素后,最坏情况下二分会退化到线性扫描,不过许多时候我们仍能 (\log n) 定位。只要小心处理 nums[mid] == nums[r]
的情况,就能往左缩或右缩一步。”
📥 输入格式
第一行:整数 n
第二行:n 个整数 nums[i],表示被旋转后的刻度数组
- \(1 \le n \le 5000\)
- \(-5000 \le nums[i] \le 5000\)
nums
原本是非降序排列,旋转前相邻元素允许相等,且所有值来自同一序列。- 旋转次数在 \([1,n]\) 之间,旋转 \(n\) 次等同于未旋转。
📤 输出格式
输出一个整数:序列 nums 中的最小元素
💡 输入输出样例
样例 1
5
1 3 5 3 4
1
原序如
[1,3,3,4,5]
,旋转后可能得到输入,最小值为 1。
样例 2
5
2 2 2 0 1
0
原序如
[0,1,2,2,2]
,旋转后得到输入,最小值为 0。
样例 3
7
4 5 5 6 7 4 5
4
原序如
[4,4,5,5,5,6,7]
,旋转后得到输入,最小值为 4。
📊 数据范围
- \(1 \le n \le 5000\)
- \(-5000 \le nums[i] \le 5000\)
- 要求算法平均 \(O(\log n)\),但允许最坏 \(O(n)\) (重复元素退化时)。