LeetCode-26.有序数组中去除重复项(26-I, 80-II)

一、LeetCode-26.有序数组中去除重复项

1. 参考: https://www.jb51.net/article/217344.htm

2. 实现

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

int removeDuplicates(int *arr, int sz)
{
    int pre = 0, cur = 0;
    
    while(cur < sz) {
        if (arr[pre] == arr[cur]) {
            cur++;
        } else {
            arr[++pre] = arr[cur++];
        }
    }
    return pre + 1;
}

int main()
{
    int i, len;
    int arr[] = {1,2,2,2,2,2,3,1,1,1,1,4};

    len = removeDuplicates(arr, ARRAY_SIZE(arr));

    for (i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

 

LeetCode-80.删除有序数组中的重复项Ⅱ

1. 参考

https://blog.csdn.net/weixin_73982851/article/details/145538044?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-145538044-blog-115459119.235^v43^control&spm=1001.2101.3001.4242.1&utm_relevant_index=3

2. 实现

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

/*
nums = [0,0,1,1,1,1,2,3,3]
nums = [0,1,1,1,1,2,3,3,3,4,4,5,6,6,6,7,7,8,9,9,9]
*/
int removeDuplicates(int *arr, int sz)
{
    int i, idx = 0, cnt = 1;

    if (sz < 2) return sz;

    for (i = 1; i < sz; i++) {
        if (arr[i] == arr[idx]) {
            cnt++;
        } else {
            cnt = 1;
        }

        if (cnt <= 2) {
            arr[++idx] = arr[i];
        }
    }

    return idx + 1;
}

int main()
{
    int i, len;
    int arr[] = {0,1,1,1,1,2,3,3,3,4,4,5,6,6,6,7,7,8,9,9,9};

    len = removeDuplicates(arr, ARRAY_SIZE(arr));

    for (i = 0; i < len; i++) {
        printf("%d ", arr[i]); //0 1 1 2 3 3 4 4 5 6 6 7 7 8 9 9 
    }
    printf("\n");

    return 0;
}

 

posted on 2025-02-16 14:24  Hello-World3  阅读(10)  评论(0)    收藏  举报

导航