题目:
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
输入:[1,1,2]
输出: [1,2]
解题思路:数组nums是升序数组,相同的元素只可能出现在相邻的数中,所以我们可以通过遍历数组,设立两个指针,一个快指针,一个慢指针。快指针遍历对比相邻两个数字是否相同,如果不相同的话,将其放入慢指针队列中。
public int removeDuplicates(int[] nums) {
int low=1,high=1; //设置一个低指针,一个高指针。
if(nums.length==0)return 0;
while(high<nums.length){ //当高指针小于地指针的长度时
if(nums[high]!=nums[high-1]){ //当相邻两个数不一样的适合
nums[low]=nums[high]; //把数子存入数组
low++;
}
high++;
}
return low;//返回 数组nums[low]的长度
}
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array