代码随想录完结篇|84.柱状图中最大的矩形 剑指offer29、31

84.柱状图中最大的矩形

题目链接

本题就是用单调递减栈来做就行,需要在数组起始位置和末尾先加0。

class Solution {
public:
    int largestRectangleArea(vector& h) {
        int result=0;
        stack st;
        h.insert(h.begin(),0);
        h.push_back(0);
        st.push(0);
        for(int i=1;ih[st.top()]){
                st.push(i);
            }else if(h[i]==h[st.top()]){
                st.pop();
                st.push(i);
            }else{
                while(!st.empty()&&h[i]

代码随想录一刷就结束了。

剑指 Offer 29. 顺时针打印矩阵

题目链接

主要参考B站视频,出现的问题就是溢出了,for循环的结束条件没有判断清楚。

class Solution {
public:
    vector spiralOrder(vector>& matrix) {
        vector res;
        if(matrix.size()==0||matrix[0].size()==0) return {};
        int l=0,t=0,r=matrix[0].size()-1,b=matrix.size()-1;
        while(true){
            int i=t,j=l;
            //从左往右
            for(j=l;j<=r;j++){//这里跳出循环时,j已经等于r+1了,所以下面会溢出
                res.push_back(matrix[i][j]);
            }
            t++;
            if(t>b) break;
            //从上往下遍历
            for(i=t;i<=b;i++){
                res.push_back(matrix[i][r]);
            }
            r--;
            if(r=l;j--){
                res.push_back(matrix[b][j]);
            }
            b--;
            if(b=t;i--){//t之前已经加过了,所以直接写j>=t即可
                res.push_back(matrix[i][l]);
            }
            l++;
            if(l>r) break;
        }
        return res;
    }
};

剑指 Offer 31. 栈的压入、弹出序列

题目链接

这题还是需要画个图来理解一下。参考B站视频

class Solution {
public:
    bool validateStackSequences(vector& pushed, vector& popped) {
        if(pushed.empty()&&popped.empty()) return true;
        if(pushed.size()!=popped.size()) return false;
        stack st;
        int k=0;
        for(int i=0;i

你可能感兴趣的:(算法,leetcode,数据结构)