蓝桥杯校内预选赛题 欢迎大佬批评指正!!!
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
分析: 1.我们先按题目完成输入语句
写输入语句时需要注意,在用完 .nextInt()之后我们需要重新创建一个新的Scanner对象,再来写.nextLine(),但是反过来就不需要重新写对象了。这是因为在 .nextInt()会默认读入一个空格,直接用.nextLine(),就会被认为用户输入的就是空格。
2.输入的时候我们是把读入的l.k.r放在字符串中的,我们需要把该字符串转化为整形数组,方便我们之后使用下标来获取l,k,r的值。
文章图片
3.随后我们根据l和k值截取源字符串
文章图片
把截取的数据放到整形数组里方便排序和对元素进行下标操作
文章图片
然后对截取后的元素进行升序排序
文章图片
我们将截取后的每行元素放到一个一维数组里,最后直接根据下标和截取的规则(substring是截头不截尾)获取要求的r
文章图片
代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main4 {
public static void main(String[] args) {
//1.第一行包含一个数n,表示序列长度。
Scanner in0=new Scanner(System.in);
int n=in0.nextInt();
//2.第二行包含n个正整数,表示给定的序列。
Scanner in1=new Scanner(System.in);
String str1=in1.nextLine();
// 3.第三个包含一个正整数m,表示询问个数。
int m=in1.nextInt();
//4.接下来m行,每行三个数l,r,K,
Scanner in2=new Scanner(System.in);
int arr[][]=new int[m][3];
for(int i=0;
i
运行结果:
文章图片
再加一个牛客上刷到的类似的题
问题描述 找出n个数里最小的k个数
【第l个数到第r个数中第K大的数是哪个———蓝桥杯】输入描述:
每个测试用例包括用空格分开的n+1个数,最后一个整数值为k
输出描述:
输出n个整数里最小的k个数
示例:
输入
3 9 6 8 -10 7 -11 19 30 12 23 5
输出
-11 -10 3 6 7
代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
String st[]=str.split(" ");
int k=Integer.parseInt(st[st.length-1]);
int []arr=new int[st.length-1];
for(int i=0;
i.length-1;
i++){
arr[i]=Integer.parseInt(st[i]);
}
Arrays.sort(arr);
for(int i=0;
i
运行结果:
文章图片
推荐阅读
- java|蓝桥杯第五届省赛java试题及解析(不断更新)
- 还在用递归,试试迭代吧
- 如何在Quarkus 框架中使用 Native Image
- Redis 存储结构体信息,选 hash 还是string()
- 2021 年最常用密码出炉,第一毫无悬念!
- 面试|真别卷了 , 踏踏实实金三银四 , 少走点弯路
- java|“我跳槽了 , 工资翻倍”
- 程序人生|给3月准备跳槽的后端提个醒,千万别当愣头青
- Java|程序员在35岁的时候依然被公司抢着要(这或许是答案...)