剑指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;
}
#笔试题目##C/C++#
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删了就不会出现这个提升