leetcode初級演算法-刪除重複元素
阿新 • • 發佈:2019-01-06
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。
#include <stdio.h> #include <stdlib.h> #include<string.h> //刪除重複元素 int removeDuplicates(int* nums, int numsSize); int main() { int nums[10]={0,0,1,1,1,2,2,3,3,4}; int length=10,len; len=removeDuplicates(nums,length); printf("%d\n",len); for (int i=0;i<len;i++) printf("%d ",nums[i]); //printf("Hello world!\n"); return 0; } int removeDuplicates(int* nums, int numsSize) { int temp=nums[0]; int index=1,len=numsSize; for (int i=1;i<numsSize;i++) { if(nums[i]==temp) len--; else { nums[index]=nums[i]; index++; } temp=nums[i]; } return len; }
另解:
/*優化演算法 int removeDuplicates(int* nums, int numsSize) { if(numsSize == 0) return 0; int cur = 0, pre = 0; while (cur < numsSize) { if(nums[pre] == nums[cur]) { cur ++; } else { nums[++pre] = nums[cur++]; } } return pre + 1; }*/