剑指offer TOPk问题

class Solution {
public:


void HeapAdjust(vector<int>& input, int s, int m)
{
int temp=input[s];
for(int i=2*s+1;i<m;i=i*2+1)
{
if(i<m-1 && input[i]<input[i+1])
i++;
if(temp<input[i])
{
input[s]=input[i];
s=i;
}else
break;
}
input[s]=temp;
}
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> res;
if(input.size()==0)
return res;
if(input.size()<k)
return res;
if(input.size()==k)
return input;
res.assign(input.begin(),input.begin()+k);
for(int i=k/2-1;i>=0;i--)
HeapAdjust(res,i,k);

for(int i=1;i<input.size();i++)
{
if(input[i]<res[0])
{
res[0]=input[i];
HeapAdjust(res,0,k);
}
}

return res;

}
};

一直是这个问题:段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
哪位大佬帮看一下,那个地方出问题了? 如果把第二个for删了就不会出现这个提升


#笔试题目##C/C++#
全部评论
用堆排的方法
点赞 回复 分享
发布于 2019-08-21 19:44

相关推荐

就用这个吧:支持多益再加一个空气使用费
点赞 评论 收藏
分享
mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务