面试经典150题-4-删除有序数组中的重复项 II-力扣80

79 阅读1分钟

删除有序数组中的重复项 II-力扣80

难度:mid

题目描述

image.png

示例

image.png

解法1:时间换空间

和上题思路一模一样,把比较条件增加至三个元素之间的比较即可

int removeDuplicates(int* nums, int numsSize) {
    // 边界问题
    if(numsSize == 1 || numsSize == 2) return numsSize;

    int i = 2, j, k = numsSize;

    while(1){
        if(i == k) break;

        if(nums[i] == nums[i-1] && nums[i] == nums[i-2]){ // 元素出现次数超过2两次 
            for(j = i; j < k - 1; j++)
                nums[j] = nums[j+1];
            k --;
        } else {
            i ++;
        }

    }

    return k;

}

时间复杂度:O(n2)O(n^2)