原题
LeetCode 33. 搜索旋转排序数组
思路
- 这个题考察双指针,主要难点在于根据判断条件来缩边界。
- 之前我差点想把所有的情况都罗列出来,但后来发现边界缩范围只有两种,左缩或右缩。所以只要将其中一种情况列出,另一种用else就可。
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int i = 0, j = n - 1;
while (i < j) {
int mid = i + (j - i) / 2;
if (nums[0] <= nums[mid] && target >= nums[0] && target <= nums[mid]) j = mid;
else if (nums[0] > nums[mid] && (nums[0] <= target || target <= nums[mid])) j = mid;
else i = mid + 1;
}
return ((i == j && nums[i] == target)? i : -1);
}
};
运行截图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1cc070306e390752de432725b44308fc.png)
收获
- 这里有一个点尚未解决的是,我用向前规约做,如上所示,是没问题的,但是向后规约就出问题了,需要十分注意“=”添加的地方。如果后续调试没问题了再加上对应代码