简介
题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
解决方式:数组 + 双指针
这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!
推荐查看Max大佬所作题解。
双指针
解题思路:双指针,一个指针 p 作为数组前面的唯一数字序列的最后一位,一个指针 q 迭代整个数组寻找与最后一位不同的数字,找到了就将其放在最后一位的下一位,然后 p、q 指针都下移,没找到则 q 指针下移继续寻找,直到迭代完整个数组。
java
class Solution {
public int removeDuplicates(int[] nums) {
// 边界处理
if(nums.length == 0 || nums == null){
return 0;
}
// 双指针
// p相当于是目标唯一数字序列的最后一位,而q则用来迭代数组剩余元素
int p = 0;
int q = 1;
while(q < nums.length){
if(nums[p] != nums[q]){
// 不相等,找到有序不严格递增数组的唯一元素,设置在唯一数字序列中
nums[p + 1] = nums[q];
// 唯一数字序列最后一位更迭
p++;
}
// 相等,q前进寻找不等元素
q++;
}
// 返回结果
return p + 1;
}
}
双指针优化
初始数组可能每一个元素都唯一,所以可以避免自己覆盖自己。
java
class Solution {
public int removeDuplicates(int[] nums) {
// 边界处理
if(nums.length == 0 || nums == null){
return 0;
}
// 双指针
// p相当于是目标唯一数字序列的最后一位,而q则用来迭代数组剩余元素
int p = 0;
int q = 1;
while(q < nums.length){
if(nums[p] != nums[q]){
// 优化,防止数组中的所有元素本来就唯一
if(q - p > 1){
// 不相等,找到有序不严格递增数组的唯一元素,设置在唯一数字序列中
nums[p + 1] = nums[q];
}
// 唯一数字序列最后一位更迭
p++;
}
// 相等,q前进寻找不等元素
q++;
}
// 返回结果
return p + 1;
}
}