力扣每日一题——删除有序数组中的重复项

文章目录

  • 前言
  • 一、示例
  • 二、思路和代码
    • 1.思路
    • 2.代码


前言

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成

一、示例

力扣每日一题——删除有序数组中的重复项_第1张图片

二、思路和代码

1.思路

一开始,第0个和第1个数字比较
…若是相等,则重复数字次数+1
…若是不相等,则把不相等的数字赋值给第0个元素的后一个元素,然后用第1个数字(新的)继续和后面数字比较。
以此类推。
最后返回值就是总长度减去重复数字的次数

2.代码

代码如下(示例):

int removeDuplicates(int* nums, int numsSize){
    int i, j, m = 0;
    
    for(i = 0, j = 1; j < numsSize; j++) {
        if(nums[i] == nums[j] ) {
            ++m;    //m是用来记录有多少个重复的数字
            continue;
        } else {
            nums[i + 1] = nums[j];
            ++i;
        }

    }

    return (numsSize-m);    //用总长度减去重复的数字,就是前面没有重复过的元素
}

结果如图所示:
力扣每日一题——删除有序数组中的重复项_第2张图片


你可能感兴趣的:(C语言,leetcode,排序算法,算法,c语言)