最小秩序ある調整

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/iov3Rain/article/details/90244077

タイトル説明

が整数の配列は、あるインデックスmを見つけるために関数を記述し、N、MとNとの要素がソートされている限り、アレイ全体が順序付けされます。注意:NMはできるだけ小さくしなければならない、それは予選の最短のシーケンスを見つける、と言うことです。

与えられたアレイAとアレイのINTサイズnは、必要な開始と終了シーケンスを表すタプルを返します。(ゼロ基準位置からのプロ配列、元のシーケンスは[0,0]に戻り注文した場合)。要素の保証は正の整数です。

試験サンプル:

[1,4,6,5,9,10]、6

戻り値:[2,3]

 

 

愚かな方法

class Rearrange {
public:
    vector<int> findSegment(vector<int> A, int n) {
        // write code here
        vector<int> res(2, 0);
        vector<int> temp(A.begin(), A.end());
        sort(A.begin(), A.end());
        for(int i = 0; i < n; ++i)
        {
            if(temp[i] != A[i])
            {
                res[0] = i;
                break;
            }
        }
        for(int i = n - 1; i >= 0; --i)
        {
            if(temp[i] != A[i])
            {
                res[1] = i;
                return res;
            }
        }
        return res;
    }
};

Nを見つけることが左から右に1回、2回横断し、いったん右からMを見つけるために、左に

(1)Nを見つける左から右へ

現在の要素が現在の要素よりも小さくなる前の最大の要素が現在の要素で[MN]及びランダムシーケンスに記載されなければならない場合、更新上付き現在の要素となるようにランダム要素Nの最大の課題です。

(2)Mを見つけるために、右から左へ

要素が現在の要素が現在の要素の[MN]及びランダムシーケンスに記載されるものとなる前に電流が最小の要素よりも大きい場合には現在の最小要素となるように、更新対象の障害現在の要素のインデックスM

class Rearrange {
public:
    vector<int> findSegment(vector<int> A, int n) {
        // write code here
        vector<int> res(2, 0);
        int max = A[0];
        int min = A[A.size() - 1];
        for(int i = 0; i < n; ++i)
        {
            if(A[i] >= max)
            {
                max = A[i];
            }
            else
            {
                res[1] = i;
            }
        }
        for(int i = n - 1; i >= 0; --i)
        {
            if(A[i] <= min)
            {
                min = A[i];
            }
            else
            {
                res[0] = i;
            }
        }
        return res;
    }
};

 

おすすめ

転載: blog.csdn.net/iov3Rain/article/details/90244077