Leetcode一般的な質問に答えると、分析要約し、集約--T33(検索の回転は配列をソート)

件名の説明:

アレイは、以前は未知点で回転させたに従って昇順と仮定する。標的配列、そのインデックスリターンの存在は、それ以外の場合は-1を返す場合、与えられた目標値を検索します。繰り返し要素は、アレイが存在しないと仮定し、アルゴリズムの複雑さのレベルことができるO(ログn)はレベル。

トピック分析:

レベルの数は、達成するために二分探索を使用するための要求レベルの被写体の複雑さに起因します。

基本的な問題解決のためのアイデアがあります:

[1]第二分法の中間を見つけ、位置に応じて前半または順序付けられた順序の後半を発見したもので、中間(NUMS [低] <NUMS [中間]:前半順序付け)

[2] NUMS場合、[低] <=目標<NUMS [中間]は、前半部分に見ることができ、又は後半を見つけるために、最初の半分の注文を示し

class Solution {
public:
    int search(vector<int>& nums, int target) {
    int len = nums.size();
    int low=0, high=len-1, mid = 0;
    if(len==0) return -1;
    while(low<=high)
    {
        mid = (low+high)/2;
        if(nums[mid]==target) return mid;
        if(nums[high]==target) return high;
        else if(nums[mid]>nums[low])   //如果中间值比最低的要大
        {
            if(nums[low]<=target && nums[mid]>target)  high = mid-1;  //表示目标值在low与mid之间
            else low = mid+1;
        }
        else {  //否则右边是升序情况
            if(nums[mid]<target&&nums[high]>=target) low=mid+1;
            else high = mid-1;
        }

    }
    return -1;  //其他情况则返回错误值-1
    }
};

 

公開された34元の記事 ウォン称賛7 ビュー4060

おすすめ

転載: blog.csdn.net/weixin_44504987/article/details/104343024