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 阅读(0) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-02-16 调度器30—调度相关结构体—p->flags
2023-02-16 调度器42—进程exit退出流程