给定一个有序数组,删除其中部分元素,使得剩下的每个数最多出现2次。要求删除的数的数量尽可能少。
例如:
给出有序数组 A =[1,1,1,2,2,3],
你给出的函数应该返回length =5, A 变为[1,1,2,2,3].
思路:如果跟前面的相等,记录出现的次数,如果大于3,就不要了,继续往后循环,如果是求数量,比较容易,直接计算个数++即可。下面的代码,还可以返回最后的结果,还不需要额外的空间。在原来切片上存储,然后记录存储到哪位位置就行了
package main
/**
*
* @param A int整型一维数组
* @return int整型
*/
func removeDuplicates( A []int ) int {
// write code here
cnt := 1
num := len(A)
idx := 0
for i := 1; i < num; i++ {
if A[i] != A[i-1] {
cnt = 1
idx++
A[idx] = A[i]
} else {
cnt++
if cnt < 3 {
idx++
A[idx] = A[i]
}
}
}
//A = A[:idx]
return idx + 1
}