华为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]

posted @ 2020-08-26 21:16  静是本能  阅读(368)  评论(0编辑  收藏  举报