考察知识点:二分
题目分析:
画图分析,可能会出现以下几种情况:
先根据中间的数与数组中索引为0的数进行比较,判断mid落在了左边还是右边。然后根据target相对于mid指向的数和索引为0的数进行比较,判断target落在了左边的梯形还是右边的梯形。每种情况对应的修改左边界和右边界即可。
所用编程语言:C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int search(vector<int>& nums, int target) {
// write code here
int size = nums.size();
int l = 0, r = size - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] <= nums[0]) {
if (nums[mid] <= target) {
if (target < nums[0]) r = mid;
else l = mid + 1;
} else {
l = mid + 1;
}
} else {
if (nums[mid] <= target) {
r = mid;
} else {
if (target < nums[size - 1]) r = mid;
else l = mid + 1;
}
}
}
if (target == nums[l]) return l;
else return -1;
}
};

京公网安备 11010502036488号