算法---区间K大数查找 Java 蓝桥杯ALGO-1
import java.util.Arrays;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner aScanner = new Scanner(System.in);
int n= aScanner.nextInt(); //读第一个
long a[] = new long[n]; //存放数组
long b[] = new long[n]; //备用数组 for(int i=0;i<n;i++)
{
a[i] = aScanner.nextInt();
}
int m = aScanner.nextInt();
int []l = new int[1001];
int []r = new int[1001];
int []k = new int[1001];
for(int i=0;i<m;i++)
{
l[i] = aScanner.nextInt();
r[i] = aScanner.nextInt();
k[i] = aScanner.nextInt();
for(int j=l[i]-1;j<r[i];j++)
{
b[j-l[i]+1] = a[j];
}
Arrays.sort(b);
System.out.println(b[b.length-k[i]]);
Arrays.fill(b, '\0'); }
}
}
刚开始做的时候使用的二维数组,使用冒泡排序,但涉及到了三层循环,最后虽然结果出来了,但是运行超时。
于是就需求更优化的方法,后来参考网上的标准答案后有一个排序函数可以用sort()函数,直接使用Arrays.sort()函数对数组进行从小到大的排序,每次得出结果后直接输出。
同时循环一次后需要对结果进行清空,我使用的是Arrays.fill()函数,用‘\0’来填充,但也有不足的地方,会在清空后都是0的形式存在,数组的长度没有变化,所以需要我之后进一步改进,最后的评测结果如图:仍旧有一个运行超时!!,仅供参考

注:网络查找标准答案代码(Java,未加头文件,自行加入):
public class Main
{
private static BufferedInputStream in = new BufferedInputStream(System.in);
public static void main(String[] args) throws IOException {
int []nums = new int[readint()]; for(int i=0;i<nums.length;i++)
{
nums[i] = readint();
}
for(int i=readint();i>0;i--)
{
int a = readint();
int b = readint();
int c = readint(); int[] tn = new int[b-a+1]; for(int j=0;j<tn.length;j++)
{
tn[j] = nums[a-1+j];
}
Arrays.sort(tn); System.out.println(tn[tn.length-c]);
}
} private static int readint()throws IOException {
// TODO Auto-generated method stub
int i,sum=0;
while(((i=in.read())&48)!=48||i>57); for(;(i&56)==48||(i&62)==56;i=in.read())
sum = sum*10+(i&15);
return sum;
}
}
算法---区间K大数查找 Java 蓝桥杯ALGO-1的更多相关文章
- 试题 算法训练 区间k大数查询 java题解
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正 ...
- Java实现 蓝桥杯 算法训练 区间k大数
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二 ...
- java 蓝桥杯算法提高 _1区间k大数查询
import java.util.Scanner; public class _1区间K大数查询 { public static void main(String[] args) { Scanner ...
- 蓝桥杯 算法训练 区间k大数查询(水题)
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...
- 蓝桥杯--算法训练 区间k大数查询
算法训练 区间k大数查询 时间限制:1.0 ...
- 蓝桥杯算法训练 区间k大数查询
算法训练 区间k大数查询 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个 ...
- 蓝桥杯 ALGO-1:区间k大数查询
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个 ...
- 算法训练 区间k大数查询
http://lx.lanqiao.org/problem.page?gpid=T11 算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个 ...
- 算法训练 区间K大数
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...
随机推荐
- win下的mongodb安装和基础操作
一.下载地址: https://www.mongodb.com/download-center/community 二.安装错误: 1.安装过程中报错(类似下图): 原因:没有管理员权限 解决:管理员 ...
- Salesforce学习之路-admin篇
Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...
- celery详解
目录 Celery详解 1.背景 2.形象比喻 3.celery具体介绍 3.1 Broker 3.2 Backend 4.使用 4.1 celery架构 4.2 安装redis+celery 4.3 ...
- Set集合、List集合
集合体系:Collection.Map接口 存储数量不等的多个对象,不能存储基本数据类型,如存储基本数据类型会自动装箱 ======================================== ...
- Python学习-迭代器、生成器
一.迭代器 1. 可迭代对象 我们知道字符串.列表.元组.字典.集合都可以使用for语句进行循环遍历,然后输出每一个元素,这些都是可迭代对象. 检查对象是否是可迭代对象可以用两种方式去判断: (1)使 ...
- 导出wordpress数据库Fatal error: Cannot 'break' 2 levels
今天我打算备份一下我在Linux下用宝塔面板搭建的phpmyadmin导出wordpress数据库.选择数据库后给我一个Fatal error: Cannot 'break' 2 levels in ...
- 轻松部署calico
一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...
- 新手学习FFmpeg - 通过API实现可控的Filter调用链
虽然通过声明[x][y]avfilter=a=x:b=y;avfilter=xxx的方式可以创建一个可用的Filter调用链,并且在绝大多数场合下这种方式都是靠谱和实用的. 但如果想精细化的管理AVF ...
- 读《深入理解Elasticsearch》点滴-Elastic HQ监控工具
1.多节点监控 2.类似war功能部署,tomcat即可使用 3.免费 4.ElasticHQ supports all major version of Elasticsearch from ver ...
- 【SQL server基础】手动创建数据库和表格
use master go if exists(select * from sysdatabases where name='learning') drop database learning go ...