Container with most water
Given n non-negative integers a1, A2, ..., an, where each represents a point at coordinate (i, ai) . N Vertical lines is drawn such, that the both endpoints of line I am at and (i, ai) (i, 0) . Find lines, which together with x-axis forms a container, such that the container contains the most water.
Example
Given [1,3,2] , the max area of the container is 2 .
Note
Slant the container.
Iterate from both ends of the array, calculate the area, and then start from the small section A to find the next larger element than a. Until all arrays have been traversed.
1 Public classSolution {2 /**3 * @paramheights:an array of integers4 * @return: An integer5 */6 Public intMaxarea (int[] Heights) {7 intL =heights.length;8 if(L = = 0) {9 return0;Ten } One intmax =-1; A inti = 0; - intj = L-1; - while(I <j) { the intv = (j-i) *math.min (Heights[i],heights[j]); - if(Max <v) { -Max =v; - } + - if(Heights[i] >Heights[j]) { + intx =Heights[j]; A while(Heights[j] <= x && i < J) j--; at}Else { - intx =Heights[i]; - while(Heights[i] <= x && i < J) i++; - } - } - returnMax; in } -}View Code
Container with the most water (lintcode)