讨论/建议反馈/239. 滑动窗口最大值 最后一个用例的校验是有异常/
239. 滑动窗口最大值 最后一个用例的校验是有异常

239. 滑动窗口最大值 这道题的最后一个用例校验是不是有问题

提交返回的结果,用工具对比了一下,预期结果和代码输出结果是一致的,但提交的结果也是报异常。
本地用例跑了也没问题。

下面是代码

class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {

    vector<int> result;

    int length = nums.size();

    if(length==0){
        return result;
    }
    int tag[length]; //记录在堆中的位置
    int begin = 0;
    vector<vector<int>> d;
    for(int i = 0 ; i < k ; i++){
        vector<int> nowNode;
        nowNode.push_back(nums[i]);
        nowNode.push_back(i);
        d.push_back(nowNode);
        tag[i] = i;
        if(i!=0){
           int last = begin / 2;
           int tmpBegin = begin;
           while(d[last][0] < d[tmpBegin][0]){
               swap(d[last],d[tmpBegin]);
               tag[d[last][1]] = last;
               tag[d[tmpBegin][1]] = tmpBegin;
               tmpBegin = last;
               last = last/2;
           }
        }
        begin++;
    }
    result.push_back(d[0][0]);

    for(int i = k ; i < length; i++){

        //删除 nums[i-k]在堆中的元素,重建堆
        int deleteNode = tag[i-k];

        swap(d[deleteNode],d[k-1]);
        tag[d[deleteNode][1]] = deleteNode;

        int last = deleteNode;
        while(last * 2 < k-1){

            int tmpMax = last;
            if(d[tmpMax][0]<d[last*2][0]){
                tmpMax = last*2;
            }
            if(last*2+1 < k-1 &&d[tmpMax][0]<d[last*2+1][0]){
                tmpMax = last*2+1;
            }
            if(tmpMax == last){
                break;
            }else{
                swap(d[tmpMax],d[last]);
                tag[d[tmpMax][1]] = tmpMax;
                tag[d[last][1]] = last;
                last = tmpMax;
            }
        }
        //插入结点
        vector<int> nowNode;
        nowNode.push_back(nums[i]); 
        nowNode.push_back(i);
        d[k-1] = nowNode;
        tag[i] = k-1;

        last = (k-1) / 2;
        int tmpBegin = k-1;
        while(d[last] < d[tmpBegin]){
               swap(d[last],d[tmpBegin]);
               tag[d[last][1]] = last;
               tag[d[tmpBegin][1]] = tmpBegin;

               tmpBegin = last;
               last = last/2;
        }
        result.push_back(d[0][0]);
    }
    return result;

}

};

展开讨论
共 1 个讨论

您好,建议再仔细调试一下代码,希望这篇内容有帮助:「为什么某些测试用例下,执行代码返回结果正确,但提交解答却出错了」。
后续刷题学习中遇到困难,可通过阅读「题解」解决做题中的一些困惑,也可把遇到的问题直接按 issue 模板提交,我们的开发同学会尽可能快的回复并修复。