题目描述:
给定非严格递增的数组,
原地删除重复出现的元素,最终每个元素只出现一次,保持元素一致的相对顺序,
返回删除后数组的长度。
的 语言中* nums表示数组,nums[i]表示数组的第个元素
一开始的思路:
将当成链表,nums->value==nums->next->value判断是否保留nums->next
报错:request for member 'next' in something not a structure or union
错误地使用了结构体指针
意识到是数组,定义了三个辅助变量
标识新数组中元素的位置,接收旧数组中不重复的元素
遍历旧数组的标识,每次加一,遇到与后一个位置不同值的元素时,传给新数组
新数组元素个数,因为中无法直接得出数组长度,得自行计算
优化:与有着线性关系即,可去掉一个辅助变量
代码:
int removeDuplicates(int* nums, int numsSize) {
int k = 0;
for (int j = 1; j < numsSize; j++) {
if (nums[j]!=nums[j-1]) {
nums[++k] = nums[j]
}
}
return ++k;
}
时间复杂度:,因为只需遍历数组一次,击败
空间复杂度:,因为只涉及到两个辅助变量,击败