段错误是什么原因?

老哥,这题牛客光是报错段错误,不清楚什么原因。找了一个小时了都没发现什么数组越界的情况。
代码原理堆排序:

class Solution {
public:
    vector<int> GetLeastNumbers_Solution( vector<int> input, int k ) {
        int len = input.size();
        if (len < k)
            return {};
        vector<int> res( input.begin(), input.begin() + k );
        //构造一个大小为k的大根堆,每次踢掉最大的,遍历完所有,最后留下的就是最小的k个
        for (int i = k - 1; i >= 1; i-=2) {
            helper( res, ( i - 1 ) >> 1,k);
        }
        for (int i = k; i < len; ++i) {
            if (res[0] > input[i]) {
                res[0] = input[i];
                helper(res,0,k);
            }
        }
        sort( res.begin(), res.end() );
        return res;
    }

    void helper( vector<int> &res,int parent,int k) {
        int left = ( parent << 1 ) + 1;
        if (left >= k)
            return;
        int right = left+1;
        if (right >= k) {
            if (res[parent] < res[left]) {
                swap( res[parent], res[left] );
                helper( res, left, k );
            }
            return;
        }
        if (res[left] > res[right]) {
            if (res[parent] < res[left]) {
                swap( res[parent], res[left] );
                helper( res, left, k );
            }
        } else {
            if (res[parent] < res[right]) {
                swap( res[parent], res[right] );
                helper( res, right, k );
            }
        }
    }
};

全部评论
居然手写堆排,十有八(居然会和谐)九是你递归没有终止。堆排的话递归不比迭代简单吧。——说是这么说,其实你的问题是helper方法没有检查k <= 0的情况。 if (k <= 0 || len < k) return {};
点赞 回复 分享
发布于 2019-01-01 00:19
我在LeetCode上找到了一个类似的题,放上去运行通过了。感觉这应该不是我的代码问题。
点赞 回复 分享
发布于 2018-12-31 21:31
段错误,一般都是数组越界的问题吧
点赞 回复 分享
发布于 2018-12-31 19:03

相关推荐

03-03 14:54
河南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务