leetcode算法练习之移除元素

题目地址:https://leetcode-cn.com/problems/remove-element/

这个题目要求原位修改,有两种思路,都可以在O(n)时间内完成,且仅占用常数内存。

思路一就是遇到值等于val的元素,就将数组长度减一,然后把每个后面的元素向前移动一位。这里不进行讨论。

思路二就是我的思路了,类似于快速排序递归前的预处理,使用两个指针,左指针从数组左边开始,遇到需要删除的数就停下,和右边一个不需要删除的数进行交换。相比思路一,思路二交换的次数更少。

ok,这是最终的代码: 

class Solution {
public:
    int removeElement(vector& nums, int val) {
        if(nums.size()==1){
            return nums[0]!=val;
        }
        int lptr=0;
        int rptr=nums.size()-1;
        int temp=0;
        int removed=0;
        while(lptr=nums.size()) return nums.size();
            }
            while(nums[rptr]==val){
                rptr--;
                removed++;
                if(rptr<0)return 0;
            }
            if(lptr

结果居然出乎意料的到了100%,看来是铁定的最优解了,然而调试的过程搞的我简直心态爆炸!leetcode算法练习之移除元素_第1张图片

leetcode算法练习之移除元素_第2张图片 

leetcode算法练习之移除元素_第3张图片 

 

你可能感兴趣的:(算法)