删除排序数组中的重复数字
题目
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
题解
双指针法
先将数组前两个元素分别用指针i和j指向,然后同时向后移动进行第一次遍历,如果nums[i] == nums[j]则表示发现一个重复的元素,遍历完成后得到重复元素的总数为count。
第二次遍历同样是使用双指针指向前两个元素,j指针向后遍历,如果找到与i指针指向的不同元素则将其替换,并将i指针后移,直至i指针指向n-count-1位置为止。
public class Solution {
/**
* @param A: a array of integers
* @return : return an integer
*/
public int removeDuplicates(int[] nums) {
int n = nums.length;
int count = 0;
for (int i=0,j=i+1;i < j && j < n; i++,j++)
{
if (nums[i] == nums[j])
{
count++;
}
}
for (int i = 0,j= i + 1;i< n - count && j < n; j++)
{
if (nums[i] != nums[j])
{
nums[++i] = nums[j];
}
}
return n - count;
}
}
Last Update 2016.9.2