leetcode_27移除元素

一、题目

    题目链接: https://leetcode-cn.com/problems/remove-element/

    leetcode_27移除元素

 

 leetcode_27移除元素

 

 

二、分析与代码

    这个其实跟之前的题目,查找重复元素,很类似,我就想着逐个遍历就好了,不符合要求的放到最后,最后的那个放到最前面。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        //不需要改变数组大小,只需要输出数组剩余数目n,以前打印前n个元素不含有val即可
        //数组长度
        int length = nums.size();
        //std::cout<<"number : "<<length<< std::endl;
        //
        int start = 0;
        int end = length-1;
        while(start <= end)
        {
            if(nums[start] != val)
                start++;
            else{
                //交换当前数字
                nums[start] = nums[end];
                end--;
            }
        }
        return start;
    }
};

    效果如下,但是说实话这个有很大差异,看看就得,没啥大用。

leetcode_27移除元素

 

 

三、参考方法

     代码随想录的方法在这里

     其主要使用了快慢指针方法,与我的差不多,但是我的会少一点,但是两个的时间复杂度基本上都是在O(n)。我的方法在平均意义上会少一点。

    

// 时间复杂度:O(n)
// 空间复杂度:O(1)
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
            if (val != nums[fastIndex]) {
                nums[slowIndex++] = nums[fastIndex];
            }
        }
        return slowIndex;
    }
};

 

     

     

上一篇:Leetcode 26.删除有序数组中重复数据


下一篇:26. 删除有序数组中的重复项