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) 收藏 举报