leetcode 33 Search in Rotated Sorted Array

来源:互联网 发布:ubuntu双系统安装教程 编辑:程序博客网 时间:2024/05/19 16:47

递归 (速度比较慢)

class Solution {public:    int search(vector<int>& nums, int target) {        size_t size = nums.size();        if (size == 0) return -1;        return recur_search(nums, 0, size - 1, target);    }private:    int recur_search(vector<int> &v, size_t b, size_t e, int target){        size_t piv = (e + b) / 2;        if (target == v[piv]) return piv;        else if (e == b) return -1; // 只剩一个数且没有找到target        if (v[b] <= v[piv]) { // 前面是顺序            if (target < v[piv] && target >= v[b]) return recur_search(v, b, piv - 1, target);            else return recur_search(v, piv + 1, e, target);        } else { // 后面是顺序            if (target > v[piv] && target <= v[e]) return recur_search(v, piv + 1, e, target);            else return recur_search(v, b, piv - 1, target);        }    }};

思路完全一样

class Solution {public:    int search(vector<int>& nums, int target) {        size_t size = nums.size();        if (size == 0) return -1;        size_t begin = 0;        size_t end = size - 1;        while (begin != end) {            size_t piv = (begin + end) / 2;            if (nums[piv] == target) return piv;            if (nums[piv] >= nums[begin]) { // 前面顺序                if (target < nums[piv] && target >= nums[begin]) { // target在前面                    end = piv -1;                                    } else { // target在后面                    begin = piv + 1;                }                  } else { // 后面顺序                if (target <= nums[end] && target > nums[piv]) { // target 在后面                    begin = piv + 1;                } else { // target 在前面                    end = piv - 1;                }                 }        }        if (nums[begin] == target)             return begin;        else             return -1;    }}; 
原创粉丝点击