題目描述
給定一個已排序的數(shù)組,去除數(shù)組中的重復元素叔扼,只保留一個重復的元素事哭,并且返回新的數(shù)組長度。
要求
不要給數(shù)組分配額外的空間瓜富,你必須使用常量的內存大小進行原地操作鳍咱。
例如
給出數(shù)組A=[1,1,2],你的函數(shù)調用之后必須返回長度length=2与柑,并且A現(xiàn)在變成[1,2]谤辜。
輸入
一個已排序的數(shù)組,例如[1,1,2]价捧。
輸出
返回數(shù)組新的長度丑念,例如length=2。
快慢指針法
設置fast指針遍歷數(shù)組结蟋,slow指針指向不重復元素的下一位脯倚。
public static int removeDuplicates(int[] nums)
{
if (nums.length < 1)
return nums.length;
int slow = 1;
for (int fast = 1; fast < nums.length; fast++) {
if (nums[fast] != nums[slow - 1]) {
nums[slow++] = nums[fast];
}
}
return slow;
}
擴展
去除已排序數(shù)組中的重復元素,保留指定位數(shù)椎眯。
public static int removeDuplicatesN(int[] nums, int repeatN)
{
if (nums.length <= repeatN)
return nums.length;
int index = repeatN;
for (int i = repeatN; i < nums.length; i++) {
if (nums[i] != nums[index - repeatN]) {
nums[index++] = nums[i];
}
}
return index;
}