C++ Codibility MaxDistance单调,什么';我的解决方案有什么问题吗
问题: 给出了一个由N个整数组成的非空零索引数组。 单调对是一对整数(P,Q),因此0≤ P≤ QC++ Codibility MaxDistance单调,什么';我的解决方案有什么问题吗,c++,algorithm,C++,Algorithm,问题: 给出了一个由N个整数组成的非空零索引数组。 单调对是一对整数(P,Q),因此0≤ P≤ Q结果){ 结果=最大-最小值; } 闵--; } max++; } 返回结果; } 我的结果是这样的,我上次考试的答案有什么问题 如果您有: 0 1 2 3 4 5 31 2 10 11 12 30 您的算法输出3,但正确答案是4=5-1 这是因为您的min在内部while循环的第一次完整运行时变为-1,因此这对(1,5)将永远没有机会被检查,max在进入嵌套whiles时从4开始 请注
例如,考虑数组A这样:
A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
有十一个单调对:(0,0),(0,2),(1,1),(1,2),(1,3),(1,4),(2,2),(3,3),(3,4),(4,4),(5,5)。最大距离为3,在一对(1,4)中
编写一个函数:
整数解(向量&A)
给定一个由N个整数组成的非空零索引数组,返回任何单调对中的最大距离
例如,假设:
A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
函数应该返回3,如上所述
假设:
N是[1..300000]范围内的整数;
数组A的每个元素都是范围内的整数[−100000000..100000000]
复杂性:
期望最坏情况时间复杂度为O(N);
预计最坏情况下的空间复杂度为O(N),超出输入存储空间(不计算输入参数所需的存储空间)。
可以修改输入数组的元素
以下是我的解决方案:
int解决方案(向量&A){
长整数结果;
long int max=A.size()-1;
长整型最小值=0;
而(A.at(max)=0){
如果(A.at(max)>=A.at(min)&&max-min>结果){
结果=最大-最小值;
}
闵--;
}
max++;
}
返回结果;
}
我的结果是这样的,我上次考试的答案有什么问题
如果您有:
0 1 2 3 4 5
31 2 10 11 12 30
您的算法输出3
,但正确答案是4=5-1
这是因为您的min
在内部while循环的第一次完整运行时变为-1,因此这对(1,5)
将永远没有机会被检查,max
在进入嵌套whiles时从4开始
请注意,当您使用O(1)
时,问题描述需要额外的存储空间。我认为用O(1)
额外存储和O(n)
时间来解决这个问题是不可能的
我建议你重新考虑你的方法。如果你放弃,有一个正式的解决方案。也许你已经知道了,但可能是某个地方的数字溢出。@Simon我用了long int
。那么就用long-long。请将问题本身添加到问题的正文中,不要依赖链接(这些链接可能会消失)@amit question补充道。
0 1 2 3 4 5
31 2 10 11 12 30