题目描述:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
这道题我们可以不能构造数组来接收自己找到的数组,必须在原数组上进行修改,用后面的值来覆盖前面的值,并且数组除了重复的元素是一个递增的数组,这样我们就可以采用双指针来解答
思路:有一个左指针i,有一个右指针j,左指针从下标0开始,右指针比左指针大,大多少我们是不知道的,但刚开始的初值为i=0和j=1。当遇到nums[i] != nums[j],将nums[i+1] = nums[j] 同时 i+1,j+1,移动到下一个位置。如果nums[j] == nums[j],右指针+1,一个循环到数组的末尾(我也是借鉴的leetcode上大神写的,但你别说,他们代码写得是真的牛鼻)。
public int removeDuplicates(int[] nums) {
if(nums.length == 0){
return 0;
}
//右指针
int j = 1;
//左指针
int i = 0;
while (j < nums.length){
//如果不相等,就将j那个位置的元素覆盖掉i+1上的元素
if(nums[j] != nums[i]){
nums[i+1] = nums[j];
//指针右指针右移
i++;
}
//左指针右移
j++;
}
return i+1;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1371769065@qq.com