題目:
給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。
思路1:
數組有序,
a、所以對重複數值的個數進行記錄,這裏使用k記錄
根據k值將當前值向前移動,這是去除前面重複數值之後當前值應該存在的位置
b、記錄數組不重複數字的個數,將後面的不重複數字按照個數加一,在數組中進行放置即可。
思路2:
使用set函數
思路1代碼如下(python):
def removeDuplicates(self,nums):
if len(nums)>0:
j = nums[0]
else:
return 0
k = 0 #用於記錄重複數值的個數
i = 1
while i < len(nums):
if nums[i] == j:
k = k + 1
else:
j = nums[i]
nums[i - k] = nums[i] #使用當前不重複的數值向前覆蓋
i = i + 1
return i - k
網上摘錄
int removeDuplicates(vector<int>& nums) {
int i = !nums.empty();
for (int n : nums)
if (n > nums[i-1])
nums[i++] = n;
return i;
}
//使用i對於不重複數字位置進行記錄,i爲當前不重複數字的個數,對有序數組來講及是該數字在數組中的位置。
//對數組中的項進行遍歷,如果後一個大於已經記錄的前一個項,說明其不是重複的則對其進行記錄,否則其就是重複的不就行記錄
int removeDuplicates(int* nums, int numsSize)
{
int pre = 0, cur = 0;
if (numsSize == 0)
return 0;
while (cur < numsSize)
{
if (nums[pre] == nums[cur])
{
cur++;
}
else
{
nums[++pre] = nums[cur++];
}
}
return pre + 1;
//與上個算法思路一樣,上個算法使用迭代遍歷數組,現在這個使用計數遍歷