ソートされた配列を考えると、あなたはそれぞれの要素が削除され、配列の新しい長さを戻した後、一度だけ表示されるように、所定の位置に繰り返し要素を削除する必要があります。配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。

アレイの所与NUMS = [1,1,2]、

関数は、2の新しい長さを返す必要があり、元の配列NUMSは、最初の2つの要素が変更され12

あなたは、新しい配列の長さの背後の要素を超えて検討する必要がありません。
================================
なトピックについて、有用な情報を抽出するために、規則的な配列は、我々は二重の使用を考える必要がありますポインタ処理が実行される。
我々は、反復要素をスキップする必要があり、操作カバーの別個の要素遭遇
解決1。
1   パブリック 静的 INT removeRepeat(INT []配列){
 2          INT LEN = Array.lengthと。
3          int型温度= 0 4  
5          であれば(LEN == 0 ){
 6              戻り 0 ;
7          } {
 8              のためのINT I 0 =; I <LEN; I ++ ){
 9                  もし(配列[TEMP] =!配列[I]){
 10                      、配列[++ TEMP] = 配列[i]は、
11                  }
 12 
13              }
 14  
15              戻り TEMP + 1 16  
17          }
 18  
19  
20  
21      }

2.重複排除機能は、[i]は配列にマップを使用して動作させることができる - 私は、保存され、あなたが重複排除効果を再生することができますので、我々は反復は、データ上で、それがカバー交換します。

ストレージシーケンスのLinkedHashMapのためのメモリを使用する必要があるので注意、ハッシュマップの非順次記憶、我々は、配列の規則的な配列を確認する必要があります

この実装は少し遅い、結果は彼の最初の問題解決のアイデアが何であれ、人はより悪いアイデアではないと考えられています

1  パブリック 静的  int型 removeDuplicates(INT [] NUMS){
 2          のLinkedHashMap <整数、整数>ハッシュマップ= 新規のLinkedHashMap <> ();
3          INT iは= 0; I <nums.length; iは++ ){
 4              hashMap.put(NUMS [i]は、I)。
5          }
 6          int型のインデックス= 0 7          ため(のMap.Entry <整数、整数> エントリ:hashMap.entrySet()){
 8              整数キー= entry.getKey()。
9              NUMS [インデックス] = キー。
10             インデックス++ ;
11          }
 12          リターン指数;
13      }

 

 

 

 

 





おすすめ

転載: www.cnblogs.com/doudou2018/p/12521353.html