难度:easy
题目描述
示例
解法1:时间换空间
从下标位置为1的开始,从后往前看,当当前元素和前一个元素相同时,说明存在重复元素,删除掉重复元素即可
删除元素后,后面的部分从i~k-2均前移1个
c代码
int removeDuplicates(int* nums, int numsSize) {
// 边界相关
if(numsSize == 0 || numsSize == 1) return numsSize; //给的数据nums是>=1的,这里面对0的判断可以省略
int i = 1, j, k = numsSize; // k用来存储删除后的数组长度
while(1){
if(i == k) break;
if(nums[i] == nums[i-1]){
// 出现重复元素,删除重复元素,把后面的集体前移
for(j = i; j < k - 1; j ++)
nums[j] = nums[j+1];
k --;
// 删除了元素后i指针就不用再前进了
} else {
i ++;
}
}
return k;
}
时间复杂度:
时间换空间的结果
go代码
func removeDuplicates(nums []int) int {
left := 0
for right, v := range nums {
if right == 0{
continue
}
// 如果出现重复元素 v == nums[left], 让left不动, right++即可
// 如果元素不重复,则left++即可
if v != nums[left] {
left ++
nums[left] = v
}
}
return left+1
}
java代码