正确答案但效率阶段的运行时错误

时间:2017-07-15 19:13:38

标签: c++ c++11 runtime-error

我在网站上编码。在这里,测试您的实现有不同的阶段,即编译,正确性和效率。

我在two pointers上做了一个问题。它的陈述是 -

  

给定n个非负整数a1,a2,...,an,   其中每个代表坐标(i,ai)处的一个点。   ' N'绘制垂直线,使得第i行的两个端点位于(i,ai)和(i,0)。

     

找到两条线,它与x轴一起形成一个容器,这样容器就含有最多的水。

     

你的程序应该返回一个整数,该整数对应于可以包含的最大水域面积

我得到了正确答案判决,但在舞台上检查效率时出现运行时错误。现在我有两个问题(第二个跟随第一个问题) -

1)如果在所有测试用例中给出正确的答案判定,它怎么会有运行时错误?

2)如果真的有可能,任何人都可以帮我找到错误或可能发生这种情况的原因吗?无论我怎么想,我都找不到:/

代码 -

int finds(vector<bool>  arr){
    int i=0;
    while(arr[i]!=0)i++;
    return i;
}
int finde(vector<bool>  arr){
    int i=arr.size()-1;
    while(arr[i]!=0)i--;
    return i;
}
struct st{
    int data;
    int index;
};
int Solution::maxArea(vector<int> &A) {
    // Do not write main() function.
    // Do not read input, instead use the arguments to the function.
    // Do not print the output, instead return values as specified
    // Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
    int n=A.size(),ans=0;
    vector<bool> visited(n,0);
    int start=0,end=n-1;
    if(n<=1)return 0;

    vector<st> arr;
    st temp;
    for(int i=0;i<n;i++){
        temp.data=A[i];
        temp.index=i;
        arr.push_back(temp);
    }
    sort(arr.begin(),arr.end(),[](st a,st b)->bool{return a.data<=b.data;});

    for(int i=0;i<n-1;i++){
       // cout<<start<<"\t"<<end<<endl;
        ans=max(ans,arr[i].data*(arr[i].index-start));
        ans=max(ans,arr[i].data*(end-arr[i].index));
        visited[arr[i].index]=true;
        start=finds(visited);
        end=finde(visited);
        //cout<<"ans is "<<ans<<endl;
    }
    return ans;
}

错误 -

Runtime Error. Your submission stopped because of a runtime error. ex: division by zero, array index out of bounds, uncaught exception You can try testing your code with custom input and try putting debug statements in your code.

*** Error in `./solution': munmap_chunk(): invalid pointer: 0x00000000026227c0 ***

Aborted

1 个答案:

答案 0 :(得分:1)

不确定这是你的问题,但可能是个问题

maxArea()中,您使用

std::vector arr进行排序
sort(arr.begin(),arr.end(),[](st a,st b)->bool{return a.data<=b.data;});

这很危险。

尝试使用&#34; less&#34;而不是&#34;少于或等于&#34 ;;我的意思是

a.data < b.data;

而不是

a.data <= b.data;

问题是std::sort()要求比较函数(称之为comp())引起严格的弱排序关系。

因此要求comp(a, a) 永远为false且comp(a, b) == true暗示comp(b, a) == false

您的(原始)lambda函数不能满足此要求。