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