牛客网真题-71-选区间

选区间

http://www.nowcoder.com/questionTerminal/70cd4744404a4fbcbffe69e53e1f964c

  • 思路1:暴力,计算sum*min 50%
  • 思路2:中心扩展法,把当前作为区间最小值,向两边扩展区间 100% 1400+ ms
  • 思路3:由于数据范围从0-100,分别找出0-100每个数对应的最大和区间(见讨论区大佬),类似查表法
  • 思路4:单调栈(最佳思路)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
        buff.readLine();
        int[] in = Arrays.stream(buff.readLine().split(" ")).parallel().mapToInt(Integer::parseInt).toArray();
        int res = 0;
        //中心扩展法
        for(int i = 0; i < in.length; i++){
            int p = i, q = i - 1;
            int sum = 0;
            while (p<in.length && in[p]>=in[i]) {
                sum += in[p];
                p++;
            }
            while (q >= 0 && in[q]>=in[i]) {
                sum += in[q];
                q--;
            }
            res = Math.max(res, sum * in[i]);
        }
        System.out.println(res);
    }
}

全部评论

相关推荐

09-29 00:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务