確立された順序に従って1389の作成標的配列

トピック:

あなたは2つの整数配列NUMSとインデックスを付けます。あなたは、次のルールに従って、ターゲット配列を作成する必要があります。

ターゲット配列のターゲットは最初は空です。
順次[i]を補間値NUMSの標的配列の右NUMS [i]とインデックス[i]は、下付き文字インデックス[i]は左から読み出します。
前の手順を繰り返し、NUMSとインデックスまでの要素が読み取ることができません。
ターゲットアレイに返却してください。

トピックは、デジタル挿入位置が常にあることを確認してください。

 

例1:

入力:NUMS = [0,1,2,3,4]、インデックス = [0,1,2,2,1]
出力:[0,4,1,3,2]が
説明した:
NUMS対象のインデックスを
0 [ 0]
1 [0]
2 2 [0、1]
3 2 [0,1,3,2]
41 [0,4,1,3,2]
実施例2:

入力:NUMS = [1,2,3,4,0]、インデックス = [0,1,2,3,0]
出力:[0,1,2,3,4]が
説明した:
NUMS対象のインデックスを
1 0 [ 1]
21 [1]〜
32 [1,2,3]
43 [1,2,3,4]
0 [0,1,2,3,4]
実施例3:

入力:NUMS = [1]、インデックス = [0]
出力:[1]

 

ヒント:

1 <= nums.length、index.length <= 100
nums.length == index.length
0 <= NUMS [i]が<= 100
0 <=インデックス[I] <I =

問題解決のアイデア:

1.元の配列インデックスは、-1の初期値を発生し、各要素の数を記録するために使用される補助アレイをCNT

2.元の配列インデックスをトラバースする、即ちCNTなし以前現在の要素よりもがあった場合は、[インデックス[I]] == - インデックスに1、i番目NUMSに対応する現在NUMS配列要素[i]は[I]その解像度で[インデックス[I] = NUM​​S [i]は、インデックスを蓄積する[I]は出現数、即ちCNT [インデックス[I]] ++です。

3.現在の要素の前に存在していた場合には、インデックス[I]及び後方要素の後、空いたインデックス[i]は、位置、新しい要素に、すなわち、

{ - (J; J> =インデックス[I] INT J = S-2)のための

       RES [J + 1] = RES [J]。

}

RES [インデックス[I] = NUM​​S [I]。

コードの実装:

class Solution {
public:
    vector<int> createTargetArray(vector<int>& nums, vector<int>& index) {
        int s=nums.size();
        int cnt[101]={-1};
        vector<int> res(s);
        for(int i=0;i<s;++i){
            if(cnt[index[i]]>=0){//后移元素
                for(int j=s-2;j>=index[i];--j){
                    res[j+1]=res[j];
                }
                res[index[i]]=nums[i];
            }
            else{
                res[index[i]]=nums[i];
                cnt[index[i]]++;
            }
        }
        return res;
    }
};

時間がかかり、メモリ使用量: 

公開された253元の記事 ウォン称賛15 ビュー30000 +

おすすめ

転載: blog.csdn.net/junjunjiao0911/article/details/105180756