一:删除有序数组的重复项
题目描述:给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序 应该保持一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
示例1:
输入:nums = [1,1,2] 输出:2, nums = [1,2] 解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
示例2:
输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素
解题思路:遍历数组,类似双指针的原理,一个存,一个遍历。 代码示例:
int removeDuplicates(int* nums, int numsSize){
int dest = 0, src = 1;
while(src < numsSize){
if (nums[src] == nums[src - 1])
{
src++;
}
else{
nums[dest] = nums[src - 1];
src++;
dest++;
}
}
nums[dest] = nums[numsSize - 1];
dest++;
return dest;
}
|