华为0826笔试题求最大矩形面积 分享下自己的思路
leetcode有类似的题目,但是横坐标都是1
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
package day0826;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class huawei_2 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
System.out.println(findMax(s));
}
public static int findMax(String s) {
String sub1 = s.substring(1, s.length() / 2 - 1);
String sub2 = s.substring(s.length() / 2 + 2, s.length() - 1);
String[] sub_1 = sub1.trim().split(",");
String[] sub_2 = sub2.trim().split(",");
int[] x = new int[sub_1.length];
int[] y = new int[sub_1.length];
for (int i = 0; i < sub_1.length; i++) {
x[i] = Integer.parseInt(sub_1[i]);
y[i] = Integer.parseInt(sub_2[i]);
if (x[i] < 0 || y[i] < 0) {
return 0;
}
}
int k=0;
int[] dp=new int [sub_1.length];
for (int i = 0;i < sub_1.length;i ++){
int start = i;
int end = i;
while (start >= 0 && y[start] >= y[i]){
start --;
}
while (end < sub_1.length && y[end] >= y[i]){
end ++;
}
start ++;
end --;
for (int j = start; j <= end; j++) {
k=k+x[j];
}
dp[i] = y[i] * k;
k=0;
}
int max = 0;
for (int i = 0;i < sub_1.length;i ++){
max = Math.max(dp[i],max);
}
return max;
}
}
//[1,1,1,1,2,1,1],[5,2,5,4,5,1,6]
//[1,-1,1,1,2,1,1],[5,2,5,4,5,1,6]