ソートされた配列のNUMS考えると、重複はほとんど二倍に登場するように、その場で重複を削除し、新しい長さを返します。
あなたはO(1)余分なメモリをインプレース入力配列を変更することでこれを行う必要があり、別のアレイのための余分なスペースを割り当てないでください。
例1:
与えられたNUMS = [1,1,1,2,2,3]、
あなたの関数は、それぞれ1、1、2、2、3であるNUMSの最初の5つの要素と、長さ= 5を返すべきです。
あなたが返される長さを超えて残すかは重要ではありません。
例2:
与えられたNUMS = [0,0,1,1,1,1,2,3,3]、
あなたの関数は、それぞれ0、0、1、1、2、3及び3に変更されるNUMSの最初の7つの要素と、長さ= 7を返すべきです。
値が返された長さを超えて設定されているかは重要ではありません。
明確化:
返される値は整数であるが、あなたの答えは、配列である理由混乱?
入力アレイは、入力アレイの変形がよくとして発呼者に知られているであろうことを意味する、参照によって渡されることに注意してください。
内部的には、あなたはこれを考えることができます。
// NUMSは、参照によって渡されます。(すなわち、コピーを作成せずに)
int型のlen = removeDuplicates(NUMS)。
//あなたの関数でNUMSへの変更は、呼び出し側が知られているであろう。
//あなたの関数によって返された長さを使用して、それが最初のlen要素を出力します。
以下のために(INT I 0 =; I <LEN; I ++){
プリント(NUMS [I])。
}
func removeDuplicates(nums []int) int {
if len(nums) <= 2 {
return len(nums)
}
preCnt := 1
l := 0
for i := 1; i < len(nums); i++ {
if nums[i] == nums[l] {
preCnt++
if preCnt <= 2 {
l++
nums[l] = nums[i]
}
} else {
l++
nums[l] = nums[i]
preCnt = 1
}
}
return l + 1
}