回应模式 - No.63555867


No.63555867 - 技术宅


无标题无名氏No.63555867 只看PO

2024-08-24(六)16:22:56 ID:2B1rYg7 回应

路过的肥哥,可以帮小肥看看代码吗( ›´ω`‹ )
力扣239:滑动窗口最大值c++

无标题无名氏No.63555871

2024-08-24(六)16:23:21 ID: 2B1rYg7 (PO主)

https://leetcode-cn.com/problems/sliding-window-maximum/

无标题无名氏No.63555883

2024-08-24(六)16:24:10 ID: 2B1rYg7 (PO主)

class Solution {
public:
    vector<int> maxAltitude(vector<int>& heights, int limit) {
        vector<int> res;
        //为空的时候
        if(heights.empty()) return heights;
        //limit为1的时候
        if(limit==1) return heights;

        deque<int> d;

        //特殊考虑,刚开始d为空的时候
        if(d.empty()){      
            int max=0;
            for(int i=0;i<limit;i++){
                if(heights[i]>max) max=heights[i];
            }
            d.push_back(max);
            res.push_back(max);                  
        }
        if(!d.empty()){
            for(int i=0,j=limit;i<heights.size()-limit+1;i++,j++){//for里面一个一个移动
                if(j>(heights.size()-1)) return res;


        

无标题无名氏No.63555890

2024-08-24(六)16:24:36 ID: 2B1rYg7 (PO主)

    //规定队首位为最大值,每次添加队首到res
                if(d.front()!=heights[i]){
                //队首不是i位,队首位与读新位比较,(新位)大于等于就放首部并清空队,小于放尾部
                    if(d.front()<=heights[j]) {
                        d.clear();
                        d.push_front(heights[j]);
                    }else{
                        d.push_back(heights[j]);
                    }
                }
                else if(d.front()==heights[i]){
                //队首是i位,去除队首,新位与队尾比较,大于等于就去除再放尾部,小于放尾部
                    d.pop_front();
                    while(d.back()<=heights[j]){
                        d.pop_back();
                    }
                    d.push_back(heights[j]);                
                }
        
                
                res.push_back(d.front());
                               
            }            
        }
        return res;    

    }
};

无标题无名氏No.63555917

2024-08-24(六)16:27:54 ID: 2B1rYg7 (PO主)

小肥是c++新手才开始刷了几天题,虽然是专业学生但是基本上混过去了超级菜( ´д`)如果涉及到的c++可以给我索引我去学习一下就好了,不胜感激( ;`д´; )

无标题无名氏No.63555974

2024-08-24(六)16:32:16 ID: 2B1rYg7 (PO主)

好心肥哥来(;´Д`)好心肥哥来

无标题无名氏No.63570206

2024-08-25(日)23:56:19 ID: YfgpobQ

首先,原题数组会有负数。你这初始化max = 0,给你个[-1, -1] 2的输入,初始化完成后res是0[0,0]
其次,初始化完d里永远只有一个元素。如果给你[3, 2, 0, 0] 3,初始化完2都被你丢掉了,你打算怎么输出答案里的第二位( ゚∀。)
再次,数组越界了。给你[0, 0] 2,会因为0<2-2+1进入循环,而你的循环会访问heights0[0,2]
同时,循环边界条件有问题。还是给你[0, 0] 2,显然答案大小是1,而你在初始化和循环各向res推了一个数

这可能不是全部的问题,但是显然你的整个程序需要重写,再看下去也没有什么帮助
我猜测这个思路是你看的题解,但实现中出现了很多的问题
这个建议或许有些刻薄,但是我看到了“尚未学会走路时尝试奔跑”。或许你应当考虑从简单题开始

最后,下次请使用pastebin( ´_ゝ`)
*没有人*会想看非等宽无高亮还分成两部分的代码的,更别说肉眼debug了

无标题无名氏No.63570237

2024-08-25(日)23:59:49 ID: YfgpobQ

>>No.63570206
第一行末&第三行末被解析成roll点了
更正:
”res是\[0\]”
”heights\[2\]”

无标题无名氏No.63618429

2024-08-30(五)22:09:19 ID: 2B1rYg7 (PO主)

非常非常感谢肥哥(;´Д`)确实是非常非常菜的,跟着力扣的那本图解做下来的,这个思路也是看了题解尝试自己做的,后面拿出来调试了一下除了有一个判空没做,其次是感觉判断的思路也太不对,给肥哥磕了

无标题无名氏No.63618446

2024-08-30(五)22:11:48 ID: 2B1rYg7 (PO主)

>>No.63570237
特别感谢