題目:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2]
,
Your function should return length = 2
, with the first two elements of nums being 1
and 2
respectively. It doesn't matter what you leave beyond the new length.
答案一(利用容器):
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int ns = nums.size();
if (ns == 0) {
return 0;
}
int i = 0;
while (i < ns - 1) {
if (nums[i] == nums[i + 1]) {
nums.erase(nums.begin() + i + 1);
ns--;
} else {
i++;
}
}
return ns;
}
};
答案二(Java):
雙指針始锚。直接改變數(shù)組登疗,當(dāng)出現(xiàn)重復(fù)的數(shù)的時(shí)候,跳過隔盛;當(dāng)數(shù)不重復(fù)時(shí),賦值給較慢的指針强缘,最終的結(jié)果是數(shù)組前面一部分沒有重復(fù)的值厢绝,后面的數(shù)字無意義,由于會返回?cái)?shù)組的大小沛婴。因此還是可以區(qū)分吼畏。
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
}