给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
题目链接 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
目录
解题思路:
暴力算法:
通过hashSet的特性来进行数组去重 然后返回hashSet的size(毕竟生活中不会限制你的实现方式,这里就不把实现写出来了)
双指针算法:
这里理解一下题意,这是一个有序的数据,注意数组是有序的。所以不会出现aba的排序情况。所以定义两个指针i = 0,j=1;如果 nums[i] != nums[j] , 那么 arr[j] 后面就不会出现和 arr[i] 相同的数值,所以可以将nums[j] 赋值给nums[i+1],然后i++;
代码
public static int removeDuplicates(int[] nums) {
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}