【发布时间】:2015-03-11 13:06:44
【问题描述】:
问题:
给出了一个由 N 个整数组成的非空零索引数组 A。 单调对是一对整数 (P, Q),满足 0 ≤ P ≤ Q
目标是找到其索引相距最远的单调对。更准确地说,我们应该最大化 Q - P 的值。只要找到距离就足够了。
例如,考虑数组 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) 对中。
写一个函数:
int 解(向量 &A);
给定一个由 N 个整数组成的非空零索引数组 A,返回任何单调对内的最大距离。
例如,给定:
A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
该函数应返回 3,如上所述。
假设:
N 是 [1..300,000] 范围内的整数; 数组 A 的每个元素都是 [−1,000,000,000..1,000,000,000] 范围内的整数。
复杂性: 预期的最坏情况时间复杂度为 O(N); 预期的最坏情况空间复杂度为 O(N),超出输入存储(不计算输入参数所需的存储)。 可以修改输入数组的元素。
这是我对MaxDistanceMonotonic的解决方案:
int solution(vector<int> &A) {
long int result;
long int max = A.size() - 1;
long int min = 0;
while(A.at(max) < A.at(min)){
max--;
min++;
}
result = max - min;
while(max < (long int)A.size()){
while(min >= 0){
if(A.at(max) >= A.at(min) && max - min > result){
result = max - min;
}
min--;
}
max++;
}
return result;
}
而我的结果是这样的,我上次测试的答案有什么问题:
【问题讨论】:
-
也许你已经知道这一点,但它可能是某处的数字溢出。
-
@Simon 我用过
long int。 -
那么使用long long。
-
请将问题本身添加到您的问题正文中,不要依赖链接(这往往会死)
-
@amit 问题已添加。