12周学习笔记
2026/5/25 4:46:40
这段代码实现了在旋转排序数组中搜索目标值的功能。旋转排序数组是指一个原本有序的数组在某个点进行了旋转,例如[4,5,6,7,0,1,2]是由[0,1,2,4,5,6,7]旋转得到的。
算法采用二分查找的变种,通过比较中间元素与左右边界的关系,确定目标值可能位于哪一侧。具体逻辑分为两种情况:
nums[0] <= nums[mid]),检查目标值是否在该有序范围内。nums[0] > nums[mid]),检查目标值是否在该有序范围内。l和r,分别指向数组的起始和末尾。mid,检查是否等于目标值。算法的时间复杂度为 $O(\log n)$,因为每次迭代都将搜索范围减半。
空间复杂度为 $O(1)$,仅使用了常数级别的额外空间。
mid = l + (r - l) / 2,避免潜在的整数溢出问题。cpp复制插入
vector<int> nums = {4,5,6,7,0,1,2}; int target = 0; Solution sol; int result = sol.search(nums, target); // 应返回 4复制插入