力扣刷题:26. 删除有序数组中的重复项
一、题目要求
给你一个 非严格递增排列的数组nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回 nums 中唯一元素的数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
二、思路:
根据题目要求首先第一点就是我们不能额外创建空间来完成这道题目。
不创建空间怎么删除多余的元素,又如何保存应当存在的元素呢?
我们通过画图的方式来理解一下这道题目:
三、解题
int removeDuplicates(int* nums, int numsSize) {
//创建两个临时变量
int start = 0;
int tmp = 1;
//循环次数小于数组长度
while (tmp < numsSize) {
//不相等的情况下:先将start++,然后再使用,使用完tmp后再进行++的操作
if (nums[start] != nums[tmp]) {
nums[++start] = nums[tmp++];
} else {
//相等的时候只需要将tmp++即可
tmp++;
}
}
//最终返回数组中的元素个数,由于start是下标,从0开始的所以这里要+1
return start + 1;
}