Problem #11: Container With Most Water
My original solution approach was as follows:
Approach 1:
class Solution { public int maxArea(int[] height) { ArrayList<Integer> highestRightmostIndexes = new ArrayList<> (height.length); for (int i=0; i<height.length-1; i++) { int maxRightIdx = i; for (int j=i+1; j<height.length; j++) { if (height[i]<=height[j]) maxRightIdx = j; } highestRightmostIndexes.add(maxRightIdx); } highestRightmostIndexes.add(0); ArrayList<Integer> highestLeftmostIndexes = new ArrayList<> (height.length); highestLeftmostIndexes.add(0); for (int i=1; i<height.length; i++) { int maxLeftIdx = i; for (int j=i-1; j>=0; j--) { if (height[i]<=height[j]) maxLeftIdx = j; } highestLeftmostIndexes.add(maxLeftIdx); } int resArea = 0; for(int i=0; i<height.length; i++) { resArea = Math.max(resArea, (Math.min(height[i], height[highestRightmostIndexes.get(i)])*Math.abs(i-highestRightmostIndexes.get(i)))); } for(int i=0; i<height.length; i++) { resArea = Math.max(resArea, (Math.min(height[i], height[highestLeftmostIndexes.get(i)])*Math.abs(i-highestLeftmostIndexes.get(i)))); } return resArea; } }
As one can perceive, this was a tad lengthy and also less intutive.
Today I solved the same using the following 2 new approaches:
Approach 2: O(n^2) Brute Force
class Solution { public int maxArea(int[] height) { int maxArea = Integer.MIN_VALUE; for (int i=0; i<height.length; i++) { for (int j=i+1; j<height.length; j++) { int lesserHeight = Math.min(height[i], height[j]); maxArea = Math.max (maxArea, lesserHeight*(j-i)); } } return maxArea; } }
Approach 3: O(n) Single Pass using Two Pointers
class Solution { public int maxArea(int[] height) { int i = 0, j = height.length-1; int maxArea = Integer.MIN_VALUE; while (i<j) { int lesserHeight = Math.min(height[i], height[j]); maxArea = Math.max(maxArea, lesserHeight*(j-i)); if (height[i]<height[j]) { i++; } else { j--; } } return maxArea; } }
Do you know of any better approach? Let me know your thoughts in the comments below!
Mam please have a look at the following URL
ReplyDeletehttps://www.geeksforgeeks.org/largest-rectangle-under-histogram/
It's also of O(n) complexity....
Yaa, that's O(n) too, but I feel they have made it unnecessarily complex and lengthy.
Delete