给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么?nums?的前 k 个元素应该保存最终结果。
将最终结果插入?nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
int removeDuplicates(int* nums, int numsSize){
//等于零直接返回
if (numsSize == 0) {
return 0;
}
//前后两个指针
int left = 1;
int right = 1;
while(right < numsSize) {
//后面的指针两个前后不相等的时候
//就把不想等那个赋给前面慢的那个指针 然后在++
if(nums[right] != nums[right - 1]){
nums[left] = nums[right];
left++;
}
right++;
}
return left;
}
int removeDuplicates(int* nums, int numsSize){
int count = 0;
//等于零直接返回
if (numsSize == 0) {
return 0;
}
for(int i = 1;i < numsSize; i++){
if(nums[i] != nums[count]){
nums[++count] = nums[i];
}
}
return ++count;
}
|