头条编程

https://www.nowcoder.com/test/8537279/summary

算法1:排序,Java过不了,得C++,MMP

package toutiao1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int[][]a=new int[n][2];
        int maxY=-1, idx=-1;
        for(int i=0;i<n;i++){
            a[i][0]=sc.nextInt();
            a[i][1]=sc.nextInt();
            if(a[i][1]>maxY) {
                maxY=a[i][1];
                idx=i;
            }
        }
        
        Stack<int[]> st = new Stack<int[]>();
        st.push(a[idx]);
        for(int i=0;i<n;i++) {
            if(i==idx) continue;
            while(!st.isEmpty()) {
                int[] t=st.peek();
                if(!(a[i][0]>t[0] && a[i][1]>t[1])) break;
                st.pop();
            }
            st.push(st.isEmpty()?a[idx]:a[i]);
        }
        
        List<int[]>l=new ArrayList<int[]>();
        while(!st.isEmpty()) l.add(st.pop());
        Collections.sort(l, new Comparator<int[]>(){
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });
        for(int[] t:l)
            System.out.println(t[0]+" "+t[1]);
    }
}

算法2:单调栈

package toutiao2;

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int[]a=new int[n];
        for(int i=0;i<n;i++){
            a[i]=sc.nextInt();
        }
        
        int[] sum = new int[n];
        sum[0]=a[0];
        for(int i=1;i<n;i++) sum[i]=sum[i-1]+a[i];
        
        int res=-1;
        Stack<Integer>st=new Stack<Integer>();
        for(int i=0;i<n;i++) {
            if(st.isEmpty()) {
                st.push(i);
            } else {
                if(a[i]>=a[st.peek()]) {
                    st.push(i);
                } else {
                    while(!st.isEmpty() && a[i]<a[st.peek()]) {
                        int t = st.pop();
                        if(st.isEmpty()) {
                            res = Math.max(res, a[t]*(sum[i-1]));
                        } else {
                            res = Math.max(res, a[t]*(sum[i-1]-sum[st.peek()]));
                        }
                    }
                    st.push(i);
                }
            }
        }
        
        System.out.println(res);
    }
}

算法3:模拟一遍

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,375评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,559评论 25 708
  • 怀着专业和良知,与你相识,为你科普。本文阅读时长2'10''。 圣诞节即将悄然而至,在这样一个被白色浪漫铺满的节日...
    74c4a1d9e9c2阅读 839评论 0 2
  • 近几年不看电视剧,也可能现在电视剧大多都是拍给初中生看的居多,不过《司马懿》说实话这部剧,只看了上面这段就决...
    OldderYang阅读 658评论 2 2
  • 能如此平静地坐下来写下这句话,能如此坦然地开始2015年新年后的生活,或许真的跟心境有关。 走过了20...
    贝壳0714阅读 702评论 0 49