| 1 | import java.util.ArrayList; |
| 2 | public class ContainerWithMostWater { |
| 3 | //Brute Force - O(n^2) |
| 4 | public static int FMWC(ArrayList<Integer> height) { |
| 5 | int maxWater = 0; |
| 6 | for(int i=0; i<height.size(); i++) { |
| 7 | for(int j=i+1; j<height.size(); j++) { |
| 8 | int ht = Math.min(height.get(i), height.get(j)); //container ht |
| 9 | int width = j-i; //container width |
| 10 | int currWater = ht * width; |
| 11 | maxWater = Math.max(maxWater, currWater); |
| 12 | } |
| 13 | } |
| 14 | |
| 15 | return maxWater; |
| 16 | } |
| 17 | |
| 18 | //Optimized (2 pointer) - O(n) |
| 19 | public static int findMaxWaterContainer(ArrayList<Integer> height) { |
| 20 | int leftPtr = 0, rightPtr = height.size()-1; |
| 21 | int maxWater = 0; |
| 22 | while(leftPtr < rightPtr) { |
| 23 | int ht = Math.min(height.get(leftPtr), height.get(rightPtr)); |
| 24 | int width = rightPtr-leftPtr; |
| 25 | int currWater = ht * width; |
| 26 | maxWater = Math.max(currWater, maxWater); |
| 27 | |
| 28 | //move ptrs |
| 29 | if(height.get(leftPtr) < height.get(rightPtr)) { |
| 30 | leftPtr++; |
| 31 | } else { |
| 32 | rightPtr--; |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | return maxWater; |
| 37 | } |
| 38 | public static void main(String args[]) { |
| 39 | ArrayList<Integer> height = new ArrayList<>(); |
| 40 | height.add(1); |
| 41 | height.add(8); |
| 42 | height.add(6); |
| 43 | height.add(2); |
| 44 | height.add(5); |
| 45 | height.add(4); |
| 46 | height.add(8); |
| 47 | height.add(3); |
| 48 | height.add(7); |
| 49 | |
| 50 | System.out.println(FMWC(height)); |
| 51 | System.out.println(findMaxWaterContainer(height)); |
| 52 | } |
| 53 | } |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…