classSolution { public: intlargestRectangleArea(vector<int>& heights){ int max = heights[0]; int len = heights.size(); for (int i = 0; i < len; ++i) { for (int j = i; j < len; ++j) { int tmp = getValue(heights, i, j); max = tmp > max ? tmp : max; } } return max; } intgetValue(vector<int>& heights, int i, int j){ int min = heights[i]; int ti = i; while (i < j) { ++i; min = heights[i] < min ? heights[i] : min; } // return i == 0 ? (min * (j-i+1)) : min * (j-i); return min * (j-ti+1); } };
classSolution { public: intlargestRectangleArea(vector<int>& heights){ int max = heights[0]; for (int i = 0; i < heights.size(); ++i) { int tmp = getHeight(heights, i, heights.size()); max = tmp > max ? tmp : max; } return max; } intgetHeight(vector<int>& heights, int i, int len){ int tmpi, tmpj; tmpi = tmpj = i; while (tmpi > 0 && heights[tmpi-1] >= heights[i]) { --tmpi; } while (tmpj < len-1 && heights[tmpj+1] >= heights[i]) { ++tmpj; } return heights[i] * (tmpj-tmpi+1); } };