As the sun begins to retreat,so autumn arrives
题目描述
给你一个 非严格递增排列 的数组
nums,请你 [原地] 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过: 更改数组nums,使nums的前k个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。返回k。
题解
从下标为1的数据开始遍历数组,如果出现与之前的数据不同的数据(第一次对比的是下标为0和下标为1的数据),计数加1,并不断更新之前数据的值,最后返回计数+1。
代码
public int removeDuplicates(int[] nums) {
int length = nums.length;
if (length == 0) {
return 0;
} else {
int i = 0;
for (int j = 1; j < length; j++) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
}
return ++i;
}
}
总结
尽量进行一次遍历,时间复杂度较低。