1 题目
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
2 双指针
双指针的套路:
- 左右指针指向的元素不相等,用右指针指向的元素代替左指针(代替左指针后一位的元素或者直接代替左指针指向的元素。具体看题目情况);
- 左右指针相等,则左指针不动,右指针右移继续遍历。
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shuang-zhi-zhen-shan-chu-zhong-fu-xiang-dai-you-hu/
首先注意数组是有序的,那么重复的元素一定会相邻。
要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。
考虑用2个指针,一个在作记作left
,一个在右记作right
,算法流程如下:
- 比较
left
和right
位置的元素是否相等。 - 如果相等,
right
后移1
位 - 如果不相等,将
right
位置的元素复制到left+1
位置上,left
后移1
位,right
后移1
位
重复上述过程,直到right
等于数组长度。
返回left+1
,即为新数组长度。
class Solution {
public int removeDuplicates(int[] nums) {
// 定义左右指针
int left;
int right = 1;
for (left = 0; right < nums.length; right++) {
if (nums[left] != nums[right]) {
nums[left + 1] = nums[right];
left++;
}
}
return left + 1;
}
}