問題:
あなたの整数の固定長配列を与え arr
、それぞれがあなたの配列をゼロに複製が再び発生し、パンの右の残りの要素です。
注:配列の長さにわたって位置にある要素を記述しないでください。
要件:、その場で上記の変更の配列を入力関数から何も返さないでください。
例1:
入力:[1,0,2,3,0,4,5,0] 出力:NULLが 説明:関数呼び出しの後、アレイ入力に修正される:1,0,0,2,3,0,0 、4]
例2:
入力:[1,2,3] 出力:NULLが 説明:関数呼び出しの後、アレイ入力に修正される:[1,2,3]
ヒント:
1 <= arr.length <= 10000
0 <= arr[i] <= 9
リンク:https://leetcode-cn.com/contest/weekly-contest-141/problems/duplicate-zeros/
分析:
素子アレイの長さの位置で必要とされる以上のものを書いてはいけません、あなたは最後のものが消去されますゼロを経験し、再び横切り、その後、現在の位置に0を挿入することができます。
ACコード:
1 クラスソリューション{ 2 公共: 3 ボイド duplicateZeros(ベクトル< INT >&ARR){ 4 int型の長さ= arr.size()。 5 ためには、(int型、I = 0 ; iが長さを<; I ++は) 6 { 7 場合(ARR [I] == 0 ) 8 { 9 arr.erase(arr.end() - 1 )。 10 arr.insert(arr.begin()+ I、0 ); 11 私は++; 12 } 13 } 14 } 15 }。
その他:
最初のコード1
1 クラスソリューション{ 2 公共 ボイド duplicateZerosは(int型[] ARR){ 3 int型 N = arr.length。 4 INT [] = Arrays.copyOf(ARR、N)。 5 INT P = 0 。 6 のために(int型 i = 0 ; iがn <; iは++ ){ 7 場合([I] == 0 ){ 8 であれば(P <N)ARR [P ++] = 0 ; 9 もし(P <N)ARR [P ++] = 0 ; 10 }他{ 11 場合(P <N)ARR [pが++] = [I]。 12 } 13 } 14 } 15 }
建設バックアップ入力データ、および元の位置を変更します。
2、ベクトルの要素は消去削除、
ベクトル<整数> VEC;
vec.erase(vec.begin()+インデックス); // VEC [インデックス]を削除したデータ
vec.insert(vec.begin()+インデックス、値); //値が位置インデックスに挿入されます。