连号区间数

xiaoxiao2021-02-28  97

小明这些天一直在思考这样一个奇怪而有趣的问题:      在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:      如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。      当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。  输入格式:  第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。  第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。  输出格式:  输出一个整数,表示不同连号区间的数目。  示例:  用户输入:  4  3 2 4 1  程序应输出:  7  用户输入:  5  3 4 2 5 1  程序应输出:  9  解释:  第一个用例中,有7个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [2,2], [3,3], [4,4] 

第二个用例中,有9个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [1,5], [2,2], [3,3], [4,4], [5,5]

import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); int n = in.nextInt(); int array[] = new int[n]; int count = 0; if(n>=1&&n<=50000){ for(int i=0;i<n;i++){ array[i] = in.nextInt(); } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]<array[j]){ if(array[i]+1==array[j]) count += 1; } if(array[i]>array[j]){ int num = array[i]; int num1 = array[j]; int p = num1; num1 = num; num = p; if(num+1==num1) count += 1; } } } System.out.println(count+n); } } }
转载请注明原文地址: https://www.6miu.com/read-44620.html

最新回复(0)