删除排序数组中的重复项
一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例1:
输入: 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 。不需要考虑数组中超出新长度后面的元素。
解题思路: 数组是排好序的,相同的肯定是挨在一起的,所以我们要遍历所有数组,把后面相同的都删掉。
使用两个指针left和right分别指向第一个和第二个元素,如果right=left,left保持不动,right右移;如果left=right,那么letf右移,将right的值赋给left。
class Solution {
public int removeDuplicates(int[] nums) {
int left=0,len=nums.length;
for(int right=1;right<len;right++){
if(nums[left]!=nums[right]){
left++;
nums[left]=nums[right];
}
}
return left+1;
}
}