力扣算法笔记--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 @ 2021-05-23 01:05  他乡一故知  阅读(102)  评论(0编辑  收藏  举报