力扣算法笔记--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 }
复制代码

 运行截图:

 

这个算法算是比较基础的,其重点就在重复比较,思路能够保证稳定性和易用性,如果有收获那就点个赞呗!
posted @   他乡一故知  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示