问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 序列长度
int n = scan.nextInt();
// 创建数组,长度为序列长度
int arr1[] = new int[n];
// for循环为数组赋值
for(int i=0; i<n; i++){
arr1[i] = scan.nextInt();
}
//询问个数
int m = scan.nextInt();
//创建二维数组存放每一次的l,r,k
int[][] arr2 = new int[m][3];
//存放每一次询问的结果
int[] result = new int[m];
for(int i=0; i<m; i++){
for(int j=0; j<3; j++){
arr2[i][j] = scan.nextInt();
}
//调用result函数求出每次询问的值
result[i] = search(arr1,arr2[i][0],arr2[i][1],arr2[i][2]);
}
for(int i: result){
System.out.println(i);
}
}
public static int search(int[] arr,int l, int r,int k){
// 创建询问数组的长度为右区间-左区间+1
int[] arr1 = new int[r-l+1];
for(int i=0,j=l-1; i<arr1.length; i++,j++){
//将要判断的数据存放到新的数组中
arr1[i] = arr[j];
}
Arrays.sort(arr1);
//最后返回结果,其实就是倒序输出,想一想就明白了
return arr1[arr1.length-k];
}
}
有不懂的可以评论区问我,附带一张我的结果图