考察知识点:二分
题目分析:
画图分析,可能会出现以下几种情况:
先根据中间的数与数组中索引为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; } };