• 历届试题 连号区间数


    题目

    问题描述

    小明这些天一直在思考这样一个奇怪而有趣的问题:

    在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:

    如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。

    当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。

    输入格式

    第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。

    第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。

    输出格式

    输出一个整数,表示不同连号区间的数目。

    样例输入1

    4
    3 2 4 1

    样例输出1

    7

    样例输入2

    5
    3 4 2 5 1

    样例输出2

    9


    思路:

    直接暴力判断,60分
    改进一下,既然给的是全排列,两两不相同,只要区间内的 最大数 - 最小数 = 区间长度 即可。


    代码

    import java.util.*;
    import java.math.*;
    import java.util.regex.*;
    
    
    public class Main {
    
        final static int INF = 0x3f3f3f3f;
        final static int NUM = 100;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            int n;
            while (sc.hasNext()) {
                n=sc.nextInt();
                int[] a=new int[n];
                for(int i=0;i<n;i++)a[i]=sc.nextInt();
                int ans=0;
                for(int i=0;i<n;i++) {
                    int maxn=-INF,minn=INF;
                    for(int j=i;j<n;j++) {
                        maxn=maxn>a[j]?maxn:a[j];
                        minn=minn<a[j]?minn:a[j];
                        if(maxn-minn==j-i)ans++;
    
    
    //                  int[] b=new int[j-i+1];
    //                  for(int k=i,l=0;k<=j;k++,l++)
    //                      b[l]=a[k];
    //                  Arrays.sort(b);
    //                  if(b.length==1)ans++;
    //                  else {
    //                      boolean bl=true;
    //                      for(int x=1;x<b.length;x++)
    //                          if(b[x]!=b[-1]+1)bl=false;
    //                      if(bl)ans++;
    //                  }
    
    
                    }
                }
    
                System.out.println(ans);
            }
    
        }
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    页面访问权限控制
    购物车效果
    content: "e600"
    wf-删除所选
    event.target.getAttribute('id')
    css content
    mysql 浏览器submit中文, shell乱码
    导入导出
    mysql 标点符号
    mysql json
  • 原文地址:https://www.cnblogs.com/wygdove/p/4814325.html
Copyright © 2020-2023  润新知