11勝アレイ表面の回転が質問の最小数を提供します

問題:(すべての要素が0より大きい与えられた)配列の配列、我々は回転呼ん配列の末尾に移動し、いくつかの要素の始まり。
注:配列サイズが0の場合、0を返します。

入力:配列<整数>アレイの非降順の回転ベクトル

出力:最小回転素子アレイ。

アイデア::順次検索した場合、時間計算量はO(n)は、次のようにバイナリ検索に基づいて複雑性O(LOGN)アルゴリズムの程度は、特にアイデアがある時間を紹介

頭と尾配列の先頭を指し、二つのポインタの値index1とINDEX2を確立します。

A。配列は配列[index1の<配列[INDEX2]は、回転が経過していないことを示しているが、結果は直接に出力配列[index1の】非降順であるため。

B。配列[index1の]> =配列[INDEX2]、要素が直接アレイを取って、最小値を見つけることができない[(index1の+ INDEX2)/ 2]頭と尾と比べ。

B.1。絞り込み処理、INDEX2-index1の== 1、次いでINDEX2を返す。場合、または(配列[index1の] ==配列[INDEX2])&&(配列[index1の] ==配列[(index1ので+ INDEX2)/ 2])は、順次検索にのみスイッチを、見つけるために、二分法を使用することはできません

B.2。配列[index1の<=配列[(index1の+ INDEX2)/ 2]、右半分の最小数は、index1の(index1の+ INDEX2)/ 2に割り当てられている場合

B.3。配列[INDEX2]> =配列[(index1の+ INDEX2)/ 2]、INDEX2に割り当てられた左半分の最小数、(index1の+ INDEX2)/ 2の場合

コード:

class Solution {
public:
    int minNumberInRotateArray_SequenceFind(vector<int> array)
    {
        int result=array[0];
        int length=array.size();
        for(int i=1;i<length;i++)
        {
            if(array[i]<result)
                result=array[i];
        }
        return result;
    }
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.empty())
            return 0;
        int length=rotateArray.size();
        int index1=0;
        int index2=length-1;
        int midIndex=index1;
        while(rotateArray[index1]>=rotateArray[index2])
        {
            if((index2-index1)==1)
                return rotateArray[index2];
            midIndex=(index2+index1)/2;
            if((rotateArray[index1]==rotateArray[index2])&&(rotateArray[index1]==rotateArray[midIndex]))
                return minNumberInRotateArray_SequenceFind(rotateArray);
            if(rotateArray[index1]<=rotateArray[midIndex])
                index1 = midIndex;
            else if(rotateArray[index2]>=rotateArray[midIndex])
                index2 = midIndex;
            
        }
        return rotateArray[midIndex];
    }
};

複雑分析: O(N)の時間計算量は、空間的複雑度はO(1)です。

公開された56元の記事 ウォン称賛10 ビュー6798

おすすめ

転載: blog.csdn.net/qq_22148493/article/details/104425566
おすすめ