LeetCode::从排序数组中删除重复项——简单算法题

题目:

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例:

给定数组 nums = [1,1,2],

函数应该返回新的长度 2,

并且原数组 nums 的前两个元素被修改为[1,2]

你不需要考虑数组中超出新长度后面的元素

思路:

题目意思就是把重复的数删除,然后只输出剩余的数,其实就是用后面的数占据前面重复的这个数的位置。

因为这道题的前提是已经排好顺序的数组,所以最后只输出数组中从下标0到最后那个交换位置的下标就可以了。大致的方法就是用两个数记录数组下标的变化,例如用 i 和 j,令i=0,j=1;用一个循环记录j从1开始与下标 i 表示的数相比看是否相等,不相等的话说明符合条件,i++,用 i 记录所求结果数组的元素个数,所以令数组[i]=数组[j],继续循环,j++,相等的话同样继续循环,最后返回 i+1,就表示删除重复项之后数组的元素的个数。(其实就算是没有排序的数组,无非就是在删除之前多加排序的过程而已,自己也可以下去试试!)自己也是个小菜鸡,哪里写得不好,希望博友们见谅 ! >_<

代码如下:

class Solution {
public:
    int result(vector<int>& nums) {   //定义一个不指定长度的动态数组
    
        if(nums.empty())              //empty()函数用来检测nums数组是否为空
            return 0;
        int i=0;
        int n=nums.size();            //调用size()函数,记录数组元素个数
        for(int j=1;j<n;j++){
            if(nums[j]!=nums[i]){
                i++;
                nums[i]=nums[j];
            }
            else
                continue;
        }
        return i+1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42296178/article/details/81117733