leetcode算法训练第四天:双指针

这篇博客介绍了如何使用栈来处理字符串中特殊字符的比较,以及运用双指针技巧计算两个区间交集。示例代码分别展示了在C++中实现这两个问题的方法,其中栈用于处理包含'#'字符的字符串比较,而双指针法则用于找到两个区间集合的交集部分。这些算法在处理字符串处理和区间操作时非常实用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述用栈的思路最简单,普通字符弹入,#字符弹出。

class Solution {
public:
    bool backspaceCompare(string s, string t) {
         return build(s)==build(t);
    }
    string build(string k){
        string res;
        for(char ch:k){
            if(ch!='#'){
                res.push_back(ch);
            }else if(!res.empty()){
                res.pop_back();
            }
        }
        return res;
    }
};

在这里插入图片描述
主要是用比较区间末端大小来筛选有用区间

class Solution {
public:
    vector<vector<int>> intervalIntersection(vector<vector<int>>& A, vector<vector<int>>& B) {
        int i = 0, j = 0;
        vector<vector<int>> res;
        while (i < A.size() && j < B.size()) {
            int l = max(A[i][0], B[j][0]);
            int r = min(A[i][1], B[j][1]);
            if (l <= r) {
                res.push_back({l, r});
            }
            // 谁的尾部小 移动谁
            if (A[i][1] < B[j][1]) 
                i++;
            else 
                j++;
        }
        return res;
    }
};

在这里插入图片描述双指针法,两边开始移动,谁小移谁

class Solution {
public:
    int maxArea(vector<int>& height) {
       int l=0,r=height.size()-1;
       int m=0;
       while(l<r){
           m=max(m,min(height[l],height[r])*(r-l));
           if(height[l]<height[r]){
               l++;
           }
           else{
               r--;
           }
       }
       return m;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值