LeetCode 1985题编译错误:返回类型不匹配问题解析
LeetCode 1985题编译错误原因及修复方案
编译错误核心原因
你的函数声明明确要求返回string类型,但代码里两处返回值都是int类型,C++是强类型语言,不允许这种隐式的类型不匹配,直接触发编译错误:
- 第14行
return q.top();:你用的是priority_queue<int>,它的top()方法返回的是int类型,和函数要求的string返回类型不兼容,编译器无法自动完成转换。 - 最后一行
return 0;:这里的0是整数常量,同样和string返回类型不匹配,没有合法的隐式转换路径。
额外隐藏问题
你用stoi把字符串转成int存储还存在溢出风险——题目里的数字字符串可能长度很长,远超int甚至long long的取值范围,转成整数会直接出错,根本无法通过所有测试用例。
修正后的代码示例
正确的做法是直接对字符串进行比较,不需要转成整数。可以用小顶堆来维护前k大的元素,或者直接排序后取对应位置:
class Solution { public: string kthLargestNumber(vector<string>& nums, int k) { // 自定义小顶堆的比较规则:字符串长度长的更大,长度相同则字典序大的更大 auto cmp = [](const string& a, const string& b) { if (a.size() != b.size()) { return a.size() > b.size(); } return a > b; }; priority_queue<string, vector<string>, decltype(cmp)> q(cmp); for (const string& num : nums) { q.push(num); // 堆大小超过k时弹出最小的,保证堆里始终是当前最大的k个元素 if (q.size() > k) { q.pop(); } } return q.top(); } };
或者更简单的排序写法:
class Solution { public: string kthLargestNumber(vector<string>& nums, int k) { sort(nums.begin(), nums.end(), [](const string& a, const string& b) { if (a.size() != b.size()) { return a.size() > b.size(); } return a > b; }); return nums[k-1]; } };
内容的提问来源于stack exchange,提问作者Palarax dope palarax
相关产品推荐
相关产品推荐

