删除有序数组中的重复项
1.题目描述
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
2.解题思路
因为要求“原地”,也就是空间复杂度为O(1),所以想到用双指针。i指向当前遍历的元素,j指向我们要生成的新数组的末尾,开始时j是0,因为数组是升序的,所以只有当nums[i]不等于nums[j]时,我们才把下标为i的元素转移到下标为j+1的位置。
3.代码
class Solution {
public int removeDuplicates(int[] nums) {
int j=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=nums[j]){
nums[++j]=nums[i];
}
}
return j+1;
}
}
4.相关知识
主要就是双指针的思想