26.ソートされた配列から重複を削除
イージー
ソートされた配列を考えると NUMS、重複を削除 して、場所 の各要素にのみ現れるように 一度 と新しい長さを返します。
あなたが入力配列変更することでこれを行う必要があり、別のアレイのための余分なスペースを割り当てない で、場所を O(1)余分なメモリで。
例1:
所与NUMSの = [1,1,2]、 あなたの関数は、長さ=を返すべきである2
の最初の2つの要素でnums
ある1
と2
夫々 。 あなたが返される長さを超えて残すかは重要ではありません。
例2:
所与NUMS = [0,0,1,1,1,2,2,3,3,4]、 あなたの関数は、長さ=を返すべきである5
の最初の5つの要素と、nums
に変更され0
、1
、2
、3
、および4
それぞれ。 値が返された長さを超えて設定されているかは重要ではありません。
明確化:
混乱返される値は整数ですが、あなたの答えが配列である理由は?
入力アレイは、入力アレイの変形例も同様に、発信者に知られているであろうことを意味する、参照によって渡されることに注意してください。
内部的には、あなたはこれを考えることができます。
// NUMSは参照によって渡されます。(すなわち、コピーを作成せずに) int型のlen = removeDuplicates(NUMS)。 //あなたの関数でNUMSへの変更は、呼び出し側が知られているであろう。 //あなたの関数によって返された長さを使用して、それが最初のlen要素を出力します。 {ため(; iはLEN <I ++は、I = 0 INT) プリント(NUMS [i])とします。 }
パッケージleetcode。 パブリッククラスRemoveDuplicatesFromSortedArray { @ org.junit.Test 公共ボイド試験(){ INT [] nums1 = {1、1、2}。 INT [] nums2 = {0、0、1、1、1、2、2、3、3、4}。 System.out.println(removeDuplicates(nums1))。 System.out.println(removeDuplicates(nums2))。 } 公共INT removeDuplicates(INT [] NUMS){ (nums.lengthが== 0){場合は 0を返します。 } i = 0 int型。 用(INTのJ = 1; J <nums.length; J ++){ IF(NUMS [J] = NUMS [I]!){ I ++。 NUMS [I] =のNUMS [J]。 } } I + 1を返します。 } }