#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)\) (重复元素退化时)。