簡體   English   中英

合並間隔/第 1034 行:字符 9:運行時錯誤:引用綁定到類型為“std::vector”的空指針<int, std::allocator<int> &gt;&#39;

[英]Merge Intervals/Line 1034: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int> >'

leetcode 問題-->我必須要計算 commom/重疊間隔 任何人都可以幫助解釋為什么會出現此錯誤。 問題鏈接-https://leetcode.com/problems/merge-intervals/

我的代碼是

    class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>>ans;
        int n = intervals.size();
        ans[0][0] = intervals[0][0];
        ans[0][1] = intervals[0][1];
        int i=0,j=1;
        while(j<n ){
            if(ans[i][1] > intervals[j][0]){
                //ans[i][0] = intervals[i][0];
                ans[i][1] = intervals[j][1];
                j++;
            }
            else{
                i=i+1;
                ans[i][0] = intervals[j][0];
                ans[i][1] = intervals[j][1];
                j++;
            }
            
        }
        return ans;
    }
};

首先,您需要為您的問題選擇一個更好的標題。 其次,我相信你的算法不符合全部可能的條件; 如果有一組像 {[2,3], [1,6]} 這樣的區間,你的算法會將這些區間合並到 [2,6]。 因此,最好對您的算法進行一些修改。

  • 為了解決這個問題,我們首先要對區間進行排序(N Log N 的順序)。

  • 這將通過:


// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return 0;
}();

// Most of headers are already included;
// Can be removed;
#include <iostream>
#include <cstdint>
#include <vector>
#include <algorithm>

static const struct Solution {
    static const std::vector<std::vector<int>> merge(
            std::vector<std::vector<int>>& intervals
    ) {
        std::sort(std::begin(intervals), std::end(intervals));
        std::vector<std::vector<int>> merged;

        if (std::size(intervals) >= 1) {
            merged.emplace_back(intervals[0]);
        }

        for (std::size_t index = 0; index < std::size(intervals); ++index) {
            const std::vector<int> interval = intervals[index];
            const std::vector<int> tail = merged.back();

            if (tail[1] >= interval[0]) {
                merged.pop_back();
                merged.emplace_back(std::vector<int> {
                    std::min(tail[0], interval[0]),
                    std::max(interval[1], tail[1])
                });

            } else {
                merged.emplace_back(interval);
            }
        }

        return merged;
    }

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM