2.双指针法

删除数组中全部的某一个元素

int removeElement(vector<int> &nums, int val)
{
    int slow = 0;
    for (int fast = 0; fast < nums.size(); fast++)
    {
        if (nums[fast] != val)
        {
            nums[slow] = nums[fast];
            slow++;
        }
        
    }
}

快的在前面判断是不是等于val  若不等于就赋值给slow然后slow++

------------------------------------------------------------------------------------

27移除零

 当slow是0时与快指针交换 有多少零就交换多少次
如果slow等于零了那么fast执行++也等于0 然后fast再++再进行交换

void moveZeroes(vector<int> &nums)
{
    int slow = 0;
    int size = nums.size();
    for (auto fast = 0; fast < nums.size(); fast++)
    {
        if (nums[slow] == 0 && nums[fast] != 0)
        {
            nums[slow++] = nums[fast];
            nums[fast] = 0;
        }
        if (nums[slow] != 0)
        {
            slow++;
        }
    }
}


要fast比slow快再进行交换

void moveZeroes(vector<int> &nums)
{
    int slow = 0;
    int size = nums.size();
    for (auto fast = 0; fast < nums.size(); fast++)
    {
        if (nums[slow] == 0 && nums[fast] != 0 && fast > slow)
        {
            nums[slow++] = nums[fast];
            nums[fast] = 0;
        }
        if (nums[slow] != 0)
        {
            slow++;
        }
    }
}

977有序数组的平方

双指针不只有快慢指针还有左右指针  两边到中间也是
有负数所以都是两边最大中间小   k代表位置 i<=j 的等于是要算相遇的那个元素再插入到新的容器

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums)
     {
        int i = 0;
        int k = nums.size()-1;
        int j = nums.size()-1;
        vector<int> v(nums.size(),0);
        while(i<=j)
        {
            if(nums[i]*nums[i]>nums[j]*nums[j])
            {
                v[k--]=nums[i]*nums[i];
                i++;
            }else
            {
                v[k--]=nums[j]*nums[j];
                j--;
            }
        }
        return v;

    }
};

----------------------------------------------------------

力扣844

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

关键步骤在于slow-- 不需要别的可以覆盖的

class Solution {
public:

    void get(string& s)
    {
       
        int slow = 0;
        int fast = 0;
        for(;fast<s.length();fast++)
        {
            if(s[fast]!='#')
            {
                s[slow++]=s[fast];
            }else if(slow!=0)
            {
               slow--;
            }
        }
        s.resize(slow);
    }
    bool backspaceCompare(string s, string t) {
             get(s);
             get(t);
             return s==t;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值