zoukankan      html  css  js  c++  java
  • 算法笔记_193:历届试题 连号区间数(Java)

    目录

    1 问题描述

    2 解决方案

     


    1 问题描述

    问题描述

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

    在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

    2 解决方案

     

    具体代码如下:

    import java.util.Scanner;
    
    public class Main {
        
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int N = in.nextInt();
            int[] number = new int[N];
            for(int i = 0;i < N;i++)
                number[i] = in.nextInt();
            int result = 0;
            for(int i = 0;i < N;i++) {
                int max = number[i];
                int min = number[i];
                for(int j = i;j < N;j++) {
                    max= Math.max(max, number[j]);
                    min = Math.min(min, number[j]);
                    if(max - min == j - i)
                        result++;
                }
            }
            System.out.println(result);
        }
    }
  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6829105.html
Copyright © 2011-2022 走看看