下面的代码可以删除有序数组的重复项,但是很遗憾,在 leecode 中运行显示超时了,这种问题还是需要使用双指针。
int removeDuplicates(int* nums, int numsSize) {
int same = 0;
for(int i = 0; i < numsSize - 1; i++){
if(nums[i] == nums[i+1]){
for(int j = i; j < numsSize - 1; j++){
nums[j] = nums[j+1];
}
i--;
++same;
}
}
return numsSize - same;
}
下面是双指针的解法
int removeDuplicates(int* nums, int numsSize) {
if (numsSize == 0) {
return 0;
}
int newLength = 1; // 新数组的长度
for (int i = 1; i < numsSize; i++) {
if (nums[i] != nums[i - 1]) {
nums[newLength++] = nums[i]; // 发现不同的元素,加入新数组
}
}
return newLength;
}
他这种解法后面的元素会混乱的所以,可以用这种方法的题一般会有“nums
的其余元素与 nums
的大小不重要”或“你不需要考虑数组中超出新长度后面的元素”类似的话