首页 > 解决方案 > codility:我的代码中的 EquiLeader Segmentation Fault 问题

问题描述

我对这个简单的代码有疑问。问题可能在于使用矢量类:

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    vector<int> left, right;
    int cnt=0,k,j;
    if (A.size()==1) return 0;
    if (A.size()==2 && A[0]==A[1]) return 1;
    if (A.size()==2 && A[0]!=A[1]) return 0;
    if (A.size()==3 && A[0]==A[1] && A[1]==A[2]) return 2;
    if (A.size()==3 && A[0]==A[1] && A[1]!=A[2]) return 0;
    for (size_t i=0; i<(A.size()-1); ++i)
    {
        left.assign( A.begin(), A.begin() + i );
        right.assign( A.begin() + i + 1, A.end());
        sort(left.begin(), right.end());
        sort(right.begin(), right.end());
        j=left.size()/2;
        k=right.size()/2;
        if (left[j]==right[k])
        {
            cnt++;
        }
    }
    return cnt;
}

执行后返回:

stderr:
Segmentation Fault

标签: c++segmentation-fault

解决方案


left[j]越界 if i==0because left.size()is i, so 0. 类似的right[k]

A.size() == 0没有考虑这种情况,将环绕A.size()-1

还有一个错字sort(left.begin(), right.end())right.end()应该是left.end()


推荐阅读