【问题标题】:why am i getting time limit exceed为什么我会超过时间限制
【发布时间】:2021-09-30 22:44:57
【问题描述】:

我试图在 leetcode 中解决这个问题。 问题:heap problem

这是我的代码:

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& score) {
        priority_queue<pair<int,int>,vector<pair<int,int>>>mxheap;
        
        for(int i=0; i<score.size(); i++){
            mxheap.push({score[i],i});
        }
        
        vector<string>ans(score.size());
        int place = 1;
        while(!mxheap.empty()){
            
            switch(place){
                case 1:  
                    ans[mxheap.top().second] = "Gold Medal";
                    mxheap.pop(); 
                    break;
                case 2:
                    ans[mxheap.top().second] = "Silver Medal";
                    mxheap.pop();
                    break;
                case 3:
                    ans[mxheap.top().second] = "Bronze Medal";
                    mxheap.pop();
                    break;
                default:
                    ans[mxheap.top().second] = to_string(place);
            }
            place++;
        }
        return ans;
    }
};

我不知道为什么我的时间限制超出了我也尝试删除这对并使用地图,但这也没有用。 我还在讨论部分看到了一些答案,这些答案也具有 (nlogn) 时间复杂度,但它们工作得很好,我的也是 (nlogn) 仍然无法正常工作,有人可以告诉我我在这里做错了什么。

【问题讨论】:

  • 你需要调试它。你在调试中做了什么?
  • 这些问题通常需要你知道或发现一个消除大部分工作的“窍门”。您可能还没有发现“窍门”。
  • 看起来您在默认情况下缺少一个弹出窗口。无限循环?由于您想在所有情况下都弹出,因此您可以在每个情况下将其移到一个位置之后。
  • 查找哪些输入导致您超时,将其设置为自定义输入,添加一些计时并从那里开始。 stackoverflow.com/questions/22387586/… 如果您之前没有计时功能,可能会很有用。
  • 您获得了 TLE,因为 Leetcode 是一个网站,其中包含基于编程和解决这些问题所需的数学技巧的随机编码谜题列表。那些不这样做并尝试直接方法的人总是以运行太慢的结果告终。不幸的是,这些编码谜题网站不提供任何 C++ 教程或学习材料来解释 C++ 的基础知识,以及它们编码谜题背后的必要算法。它们不适合那些想学习 C++ 的人使用,仅供那些想解决无意义的编码难题的人使用。

标签: c++ data-structures stl


【解决方案1】:

因为您没有弹出 default 案例中的元素。

ans[mxheap.top().second] = to_string(place);
mxheap.pop(); // Add this

这会导致无限循环,因为您的队列永远不会变空,因此 TLE。

您应该使用调试器来解决这些问题的根本原因,并在程序中添加断点以验证这些点处的预期程序状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多