トピック:
あなたは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] = NUMS [i]は、インデックスを蓄積する[I]は出現数、即ちCNT [インデックス[I]] ++です。
3.現在の要素の前に存在していた場合には、インデックス[I]及び後方要素の後、空いたインデックス[i]は、位置、新しい要素に、すなわち、
{ - (J; J> =インデックス[I] INT J = S-2)のための
RES [J + 1] = RES [J]。
}
RES [インデックス[I] = NUMS [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;
}
};
時間がかかり、メモリ使用量: