一道头条笔试题:求区间的个数

Posted weiyinfu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道头条笔试题:求区间的个数相关的知识,希望对你有一定的参考价值。

给定两个长度都为N的整型数组a[N]和b[N],求满足如下条件的闭区间个数:在区间[l,r]上,a中的任意元素都比b中的任意元素小。

这个问题是O(N)复杂度。
关键在于发现一个规律:如果在区间[l+d,r]上满足上述条件,那么在更小的区间上[l,r]必然也满足上述条件,所以就可以用一个指针不停往后走。

import java.util.Scanner;

public class Main {

Main() {
    Scanner cin = new Scanner(System.in);
    int n = cin.nextInt();
    int[] a = new int[n];
    int[] b = new int[n];
    for (int i = 0; i < n; i++) a[i] = cin.nextInt();
    for (int i = 0; i < n; i++) b[i] = cin.nextInt();
    int s = 0;
    for (int i = 0; i < n; ) {
        if (a[i] >= b[i]) {
            i++;
            continue;
        }
        int ma = Integer.MIN_VALUE, mi = Integer.MAX_VALUE;
        int r = i;
        for (; r < n; r++) {
            ma = Math.max(a[r], ma);
            mi = Math.min(b[r], mi);
            if (mi <= ma) break;
        }
        s += (r - i + 1) * (r - i) / 2;
        if (i == r) i++;
        else i = r;
    }
    System.out.println(s);
}

public static void main(String[] args) {
    new Main();
}
}

以上是关于一道头条笔试题:求区间的个数的主要内容,如果未能解决你的问题,请参考以下文章

2018今日头条春招的一道笔试题 —— 通过改变枚举的变量进行枚举优化

头条笔试题2018后端第二批

网易笔试题:找出指定区间数列中能被3整除的个数

奖品分配-头条2019笔试题

奖品分配-头条2019笔试题

今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?