力扣算法笔记--1--删除排序数组中的重复项(数组)
题目说明:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
分析:
题目给的有序数组,本身就是从小到大排序好的,不需要重新排序;既然要删除重复的元素,那么就从数组的第一个元素进行遍历,设置两个下标index1(表示保留下来的元素下标)、index2(表示原数组元素下标)。
最开始index1,index2都在第一个元素的位置,之后开始比较,如果index2表示的值等于index1表示的值,index1不变,index2++;如果index2表示的值不等于index1表示的值,那么index1++,并把index2当前的值赋给index2,index2++;以此类推,直至遍历完整个数组。
代码如下:
1 #include<stdio.h> 2 int removeDuplicates(int* nums, int numsSize){ 3 if(numsSize==0){ 4 return 0; 5 6 } 7 int index1=1,index2=1; 8 while(index2<numsSize){ 9 if(nums[index2]!=nums[index2-1]){ 10 nums[index1]=nums[index2]; 11 ++index1; 12 } 13 ++index2; 14 } 15 return index1; 16 } 17 18 int main(){ 19 int numsSize,i,length; 20 numsSize = 5; 21 int nums[5] = {1,2,2,3,4}; 22 length = removeDuplicates(nums,numsSize); 23 printf("删除后数组长度为:%d\n",length); 24 printf("删除后数组为:["); 25 for(i=0;i<length-1;i++){ 26 printf("%d,",nums[i]); 27 } 28 printf("%d",nums[length]); 29 printf("]"); 30 return 0; 31 }
运行截图:
这个算法算是比较基础的,其重点就在重复比较,思路能够保证稳定性和易用性,如果有收获那就点个赞呗!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律