33-Search in Rotated Sorted Array

别说谁变了你拦得住时间么 提交于 2019-12-03 15:05:26

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm's runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

我的解:

Runtime: 4 ms, faster than 80.23% of C++ online submissions for Search in Rotated Sorted Array.
Memory Usage: 8.8 MB, less than 77.11% of C++ online submissions for Search in Rotated Sorted Array.
// 二分查找思想,只是二分的条件有所变化class Solution {
public:
    int search(vector<int>& nums, int target) {
        int b = 0;
        int e = nums.size() - 1;
        while(b <= e)
        {
            int mid = b + (e-b)/2;
            if (nums[mid] == target)return mid;
            if (nums[mid] < nums[b])
            {
                if (target == nums[e])return e;
                if (target > nums[mid] && target < nums[e])
                    b = mid + 1;
                else
                    e = mid - 1;
            }
            else
            {
                if (target == nums[b])return b;
                if (target > nums[b] && target < nums[mid])
                    e = mid - 1;
                else
                    b = mid + 1;
            }
        }
        return -1;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!