c++ leetcode 332.重建行程地址消毒剂:堆栈溢出错误[已关闭]

wfypjpf4  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(91)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
我试图通过使用私有方法applyHierholzerAlgorithm来解决这个问题,但它总是发生在AddressSanitizer:堆栈溢出错误。
有人能给予一些提示,关于这个代码有什么问题吗?

class Solution {
public:
    vector<string> findItinerary(vector<vector<string>>& tickets) {
        
        //build the graph, and make it sorted
        for (auto entry : tickets) {
            std::string origin = entry[0];
            std::string dest = entry[1];

            if (flights.find(origin) != flights.end()) {
                flights[origin].push_back(dest);
                //sort here
                std::sort(flights[origin].begin(), flights[origin].end());

            } else {
                std::vector<std::string> destList = std::vector<std::string>();
                destList.push_back(dest);
                flights[origin] = destList;
            }
        }
        
        applyHierholzerAlgorithm("JFK");

        return result;
    }

private:
    
    std::unordered_map<std::string, std::vector<std::string>> flights;
    std::vector<std::string> result;
    
    void applyHierholzerAlgorithm(std::string origin) {

        if (flights.find(origin) != flights.end()) {
          std::vector<std::string> dests = flights[origin];

          while(!dests.empty()) {
            std::string nextTo = dests[0];
            dests.erase(dests.begin());

            applyHierholzerAlgorithm(nextTo);
          }
        }

        result.insert(result.begin(), origin);
    }
   
};
dxpyg8gm

dxpyg8gm1#

最新消息。我找到问题的答案了。
问题是我参考了leetcode的答案,因为它是由Java回答的,所以局部变量中发生了一些差异。
这两行:

std::vector<std::string> dests = flights[origin];
dests.erase(dests.begin());

将导致flights[origin]无法有效擦除其元素,然后出现堆栈溢出。
我可以在删除后再加一行:

flights[origin] = list;

或直接使用flights[origin]进行相关操作

相关问题