求解LeetCode Top K Frequent Elements代码运行时错误问题
问题排查与修复
运行时错误原因
你的代码中最后一个for循环缺少了i的递减操作,导致循环陷入死循环,不断向sol中重复添加元素,最终触发内存超限类的运行时错误。
原错误循环代码片段:
for(int i = v.size()-1 ; i>=k-1 ; i++) { sol.push_back(v[i].second); }
修复后的完整代码
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> m; // 简化频率统计逻辑 for(int num : nums) { m[num]++; } vector<pair<int,int>> v; for(auto& x : m) { v.emplace_back(x.second, x.first); } vector<int> sol; sort(v.begin(), v.end()); // 修复循环逻辑,添加i--并优化终止条件 for(int i = v.size()-1 ; i >= v.size() - k ; i--) { sol.push_back(v[i].second); } return sol; } };
额外优化说明
- 简化频率统计:直接用
m[num]++替代原有的find+insert逻辑,unordered_map会自动为不存在的key初始化值为0,代码更简洁高效。 - 优化循环条件:将终止条件改为
i >= v.size() - k,逻辑更直观——从排序后的数组末尾取前k个元素,避免计算k-1可能带来的边界混淆。 - 高效构造元素:用
emplace_back替代push_back,直接在容器内构造pair对象,比拷贝对象更高效。
内容的提问来源于stack exchange,提问作者rishabh
相关产品推荐
相关产品推荐

