热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蓝桥杯省赛真题2013年第四届Java本科B组第10题——连号区间数

蓝桥杯省赛真题2013年第四届Java本科B组第10题——连号区间数小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢&#x
蓝桥杯省赛真题2013年第四届Java本科B组
第10题——连号区间数

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

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

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

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

输入格式:
第一行是一个正整数N (1 <&#61; N <&#61; 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <&#61; Pi <&#61; N)&#xff0c; 表示这N个数字的某一全排列。

输出格式&#xff1a;
输出一个整数&#xff0c;表示不同连号区间的数目。

示例&#xff1a;
用户输入&#xff1a;
4
3 2 4 1

程序应输出&#xff1a;
7

用户输入&#xff1a;
5
3 4 2 5 1

程序应输出&#xff1a;
9

解释&#xff1a;
第一个用例中&#xff0c;有7个连号区间分别是&#xff1a;[1,1], [1,2], [1,3], [1,4], [2,2], [3,3], [4,4]
第二个用例中&#xff0c;有9个连号区间分别是&#xff1a;[1,1], [1,2], [1,3], [1,4], [1,5], [2,2], [3,3], [4,4], [5,5]

资源约定&#xff1a;
峰值内存消耗&#xff08;含虚拟机&#xff09; <64M
CPU消耗 <5000ms

请严格按要求输出&#xff0c;不要画蛇添足地打印类似&#xff1a;“请您输入…” 的多余内容。

所有代码放在同一个源文件中&#xff0c;调试通过后&#xff0c;拷贝提交该源码。
注意&#xff1a;不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意&#xff1a;主类的名字必须是&#xff1a;Main&#xff0c;否则按无效代码处理。

思路

题目写的比较复杂&#xff0c;其实就是获取一个输入&#xff0c;用来定义数组大小&#xff0c;再接收数组元素&#xff0c;然后截取数组&#xff0c;截取的子数组只要递增排列后是连续的就满足条件

代码

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner &#61; new Scanner(System.in);int N &#61; scanner.nextInt();int[] nums01 &#61; new int[N&#43;1]; //这里为了方便&#xff0c;多占一个空间&#xff0c;让下标从1开始存储int count &#61; 0; //统计个数for (int i &#61; 1; i < nums01.length; i&#43;&#43;) {nums01[i] &#61; scanner.nextInt();}for (int L &#61; 1; L < nums01.length; L&#43;&#43;) {for (int R &#61; L; R < nums01.length; R&#43;&#43;) {int[] nums02 &#61; Arrays.copyOfRange(nums01, L, R&#43;1); //截取数组放到新数组里Arrays.sort(nums02); //递增排序if (check(nums02)) { //满足连续条件则计数器&#43;1count&#43;&#43;;}}}System.out.println(count);}//检查是否连续private static boolean check(int[] nums) {for (int i &#61; 1; i < nums.length; i&#43;&#43;) {if (nums[i] - nums[i-1]!&#61;1) {return false;}}return true;}
}

评测结果最后一个点超时

在这里插入图片描述

代码优化

第一次的代码里有排序&#xff0c;这应该是超时的原因&#xff0c;我们同过寻找规律可以发现&#xff0c;不排序也可以判断区间是否连续&#xff0c;题目里给的数都不会重复&#xff0c;所以如果是递增的数列&#xff0c;则最大的数-最小的数&#43;1&#61;数列的长度。我们在每次都更新一下最大值和最小值即可

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner &#61; new Scanner(System.in);int N &#61; scanner.nextInt();int[] nums01 &#61; new int[N&#43;1]; //这里为了方便&#xff0c;多占一个空间&#xff0c;让下标从1开始存储int count &#61; 0; //统计个数for (int i &#61; 1; i < nums01.length; i&#43;&#43;) {nums01[i] &#61; scanner.nextInt();}for (int L &#61; 1; L < nums01.length; L&#43;&#43;) {//记录截取的数组中的最大值和最小值int max &#61; nums01[L];int min &#61; nums01[L];for (int R &#61; L; R < nums01.length; R&#43;&#43;) {if (L&#61;&#61;R) { //左右两个边界相等的时候&#xff0c;只有一个数必定满足条件count&#43;&#43;;}else {//更新最大值和最小值if(nums01[R]>max) max&#61;nums01[R];if(nums01[R]<min) min&#61;nums01[R];//这里的条件&#xff1a;如果是递增的数列&#xff0c;则最大的数-最小的数&#43;1&#61;数列的长度if (max-min&#43;1&#61;&#61;R-L&#43;1) { //满足连续条件则计数器&#43;1count&#43;&#43;;}}}}System.out.println(count);}}

再次测评通过

在这里插入图片描述


推荐阅读
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • AIX编程挑战赛:AIX正方形问题的算法解析与Java代码实现
    在昨晚的阅读中,我注意到了CSDN博主西部阿呆-小草屋发表的一篇文章《AIX程序设计大赛——AIX正方形问题》。该文详细阐述了AIX正方形问题的背景,并提供了一种基于Java语言的解决方案。本文将深入解析这一算法的核心思想,并展示具体的Java代码实现,旨在为参赛者和编程爱好者提供有价值的参考。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 在Java程序设计中,实现高效的分页功能是提升应用性能的关键之一。本文介绍了通过使用 `PageController` 类来处理大数据集的分页操作,该类能够从一个较大的集合中提取出指定大小的小集合。具体实现中,通过优化数据访问和减少内存消耗,确保了分页操作的高效性和稳定性。此外,文章还探讨了分页算法的优化策略,包括缓存机制和懒加载技术的应用,以进一步提高系统的响应速度和用户体验。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
author-avatar
手机用户2602926791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有