C++ 回答正确,但在效率阶段出现运行时错误

C++ 回答正确,但在效率阶段出现运行时错误,c++,c++11,runtime-error,C++,C++11,Runtime Error,我在一个在线网站上编码。在这里,测试实现的不同阶段包括编译、正确性和效率 我在做一个关于他的问题。它的声明是- 给定n个非负整数a1,a2,…,an, 其中每个代表坐标i,ai处的一个点。 “n”垂直线的绘制应确保线i的两个端点位于i,ai和i,0 找到两条线,这两条线与x轴一起构成一个容器,使容器包含最多的水 您的程序应该返回一个整数,该整数对应于可以容纳的最大水面积 我得到了正确的答案,但在检查效率的舞台上,它出现了运行时错误。现在我有两个问题,第二个问题在第一个问题之后- 1当它在所有测试

我在一个在线网站上编码。在这里,测试实现的不同阶段包括编译、正确性和效率

我在做一个关于他的问题。它的声明是-

给定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;
}

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

在maxArea中,您可以使用

这是危险的

试着用更少的钱,而不是更少或相等的钱;我是说

a.data < b.data;
而不是

a.data <= b.data;
问题在于,std::sort要求compare函数调用它comp,从而产生严格的弱排序关系

所以要求compa,a永远为false,compa,b==true意味着compb,a==false


您原来的lambda函数不满足此要求。

hmm我将在下次记住这一点。让我试试看,改变它是否解决了问题。改变它是否真的解决了我的问题。你能告诉我为什么它会很危险吗?@monster标准对std::sort的Compare第三个参数有严格的弱排序要求,如果你不尊重,你就会陷入UB,所以任何事情都有可能发生。@monster-答案修改了,但霍尔特的评论也解释了它。嗯,好的,谢谢大家的帮助。我不知道如果没有你的帮助我会花多少时间100%加班-有什么理由不通过一个常量参考?我看你用的是非常量的。也可以使用std::find来代替finds/finde。@Holt ypu所说的OT是什么意思?不使用constref有非常特殊的原因,我将努力改进它的jst习惯。Abt不使用find,我更喜欢使用我自己的函数,而不是内置函数,因为我知道它们是如何工作的,并且有助于使函数更符合我的需要,而不是通用的,尽管它也多次给我带来很多问题。OT=离题我的评论与你的问题无关。你应该尽可能多地使用标准库——编译器在优化自己的东西方面比你的要好得多。@Holt哦,是这样吗?我可以删除它,但我不知道删除是否会导致扣除max代表的正确答案。在这种情况下,我不想删除它:我的意思是,我的评论与你的问题脱离主题,而不是你的问题脱离主题;
a.data < b.data;
a.data <= b.data;