struct Wrapper {
int val;
int pos;
};
bool compare(const Wrapper &w1, const Wrapper &w2) {
return w1.val > w2.val;
}
class Solution {
public:
int maxArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Wrapper> v;
for (int i = 0; i < height.size(); i++) {
Wrapper w;
w.val = height[i];
w.pos = i;
v.push_back(w);
}
sort(v.begin(), v.end(), compare);
int minVal = v[0].pos;
int maxVal = v[0].pos;
int ret = 0;
for (int i = 1; i < v.size(); i++) {
int pos = v[i].pos;
int width = max(abs(pos - minVal), abs(pos - maxVal));
int area = v[i].val * width;
ret = max(area, ret);
minVal = min(minVal, pos);
maxVal = max(maxVal, pos);
}
return ret;
}
};
Small Case: 4ms
Large Case: 144ms
Time: O(nlgn)
Space: O(n)