1. 程式人生 > 實用技巧 >26.刪除排序陣列中的重複項

26.刪除排序陣列中的重複項

原地刪除排序陣列的重複項,返回移除後的陣列長度。要求空間複雜度O(1)。

//第一次嘗試:
//本題我認為和LeetCode-27.移除元素思想類似,這裡我們也是使用雙針指針的方法,設定兩個標誌flag、idx,一個計數位count,
//最一開始讓flag==nums[0],也就是陣列首元素;idx從第二的元素開始,也就是idx=1;count從0開始,count=0;
//因為陣列是有序的,所以從頭開始(i=0開始)遍歷陣列,如果遇到與flag相同的元素就跳過該元素,如果遇到和flag不同的元素,那麼就將該元素放到idx位置,然後idx++,count++
#include<stdio.h> #include
<stdlib.h> int removeDuplicates(int* nums, int numsSize) { int idx = 1; int flag = nums[0]; int count = 1; for (int i = 1; i < numsSize; i++) { if (flag != nums[i]) { nums[idx++] = nums[i]; flag = nums[i]; count++; } }
return count; } int main() { int num[] = { 1,2,2,3,6,8,8,9 }; int ret = removeDuplicates(num, sizeof(num) / sizeof(num[0])); for (int i = 0; i < ret; i++) { printf("%d\n", num[i]); } return 0; }