代码实现:
方法一:双指针
int removeDuplicates(int *nums, int numsSize) { int l = 0, r = 0; while (r < numsSize) { if (r > 1 && nums[r] == nums[l - 1] && nums[r] == nums[l - 2]) { r++; } else { nums[l] = nums[r]; l++; r++; } } return l; }
方法二:暴力法——不去重
int removeDuplicates(int *nums, int numsSize) { for (int i = 2; i < numsSize; i++) { if (nums[i] == nums[i - 1] && nums[i] == nums[i - 2]) { for (int j = i; j < numsSize - 1; j++) { nums[j] = nums[j + 1]; } i--; numsSize--; } } return numsSize; }
方法三:暴力法——去重
int removeDuplicates(int *nums, int numsSize) { int i, j, k; for (i = 2; i < numsSize; i++) { if (nums[i] == nums[i - 1] && nums[i] == nums[i - 2]) { for (j = i; j < numsSize; j++) { if (nums[j] != nums[j - 1]) { break; } } int n = j - i; for (k = i; k < numsSize - n; k++) { nums[k] = nums[k + n]; } numsSize -= n; } } return numsSize; }