题解 | #旋转位置的特定牛#

旋转位置的特定牛

https://www.nowcoder.com/practice/4872ba1fef224bd382b49a5958d996ab

考察知识点:二分

题目分析:

画图分析,可能会出现以下几种情况:

先根据中间的数与数组中索引为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;
    }
};

全部评论

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务