E.g。数组:{1,5,2,3,2,10}
范围:0-1答案:5 范围:2-4答案:3 范围:0-5答案:10 等
答案 0 :(得分:11)
如果数组没有排序,则无法按照您的要求进行操作。
要找到最大值,您至少需要检查范围内的所有元素,这需要O( n )。
如果您允许对数据进行某种形式的预处理,则很容易。您可以使用答案构建一个n 2 查找表。然后你可以在恒定时间内找到任何范围的最大值。
答案 1 :(得分:4)
这是不可能的。你必须访问每个元素。
如果您的数组是先验地排序的,那么它是O(1)操作。
答案 2 :(得分:1)
答案 3 :(得分:0)
@Daniel Talamas如果我理解正确,你想要这个:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int maxlement(int range1,int range2) {
std::vector<int> v{ 1, 5, 2, 3, 2, 10 };
std::vector<int>::iterator result;
result = std::max_element(v.begin()+range1, v.begin()+range2+1);
int dist = std::distance(v.begin(), result);
return v[dist];
}
int main() {
int range1,range2;
cout<<"From ";
cin>>range1;
cout<<"To ";
cin>>range2;
cout<<"Max Element Is "<<maxlement(range1,range2);
return 0;
}