1.原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)
int removeElement(int* nums, int numsSize, int val){
int* newA = (int*)malloc(numsSize * sizeof(int));
int idx = 0;
for (int i = 0; i < numsSize; i++){
if (nums[i] != val)
newA[idx++] = nums[i];
}
memcpy(nums, newA, sizeof(int)* idx);
free(newA);
return idx;
}
2.删除排序数组中的重复项
int removeDuplicates(int* nums, int numsSize){
int idx = 0;
int i = 0;
int j = 1;
while(j < numsSize){
nums[idx++] = nums[i];
if(nums[i] != nums[j]){
i++;
j++;
}
else{
//找到下一个不同的元素的位置
while(j < numsSize && nums[i] == nums[j]){
j++;
}
i = j;
j++;
}
}
if(i < numsSize){
nums[idx++] = nums[i];
}
return idx;
}