剑指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

相关推荐

MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务