【发布时间】:2020-10-25 13:57:36
【问题描述】:
我编写了这个 c++ 函数来查找数组中的最大索引差异,因为 arr[i]
约束:- 1≤T≤1000 1≤N≤10^7 0 ≤ A[i] ≤ 10^18
long long maxIndexDiff(int arr[], int n)
{
// Your code here
vector<long long > num;
for(long i=0;i<n;i++)
{
num.push_back(arr[i]);
}
long high =n-1;
long low=0;
long i_index,j_index;
while(low<high)
{
if(num[high]>=num[low])
{
i_index=low;
j_index=high;
break;
}
low++;
high--;
}
for(long i=j_index;i<n;i++)
{
if(num[i]>=num[i_index])
j_index=i;
}
for(long i=i_index;i>=0;i--)
{
if(num[i]<=num[j_index])
i_index=i;
}
return (j_index-i_index);
}
【问题讨论】:
-
你试过用调试器运行它吗?
-
您可能越界访问
num。 -
不,我没有尝试调试器,如何修复越界错误?即使我删除向量并使用数组,它也会显示分段错误
-
您使用数组使问题变得更糟。访问向量中的元素时,只需使用
vector::at()而不是[ ]。如果值越界,其中一个at()调用将引发std::out_of_range异常。 -
如果你不使用调试器,学习如何使用调试器是一个很好的操作
标签: c++ arrays vector indexing segmentation-fault