问题描述
给定一个序列,每次询问序列中第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
思路:
第四行——1至5从大到小排序5 4 3 2 1 第2位是 4
第五行——2至3从大到小排序3 2 第2位是2
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
int m = scanner.nextInt(); // 指定询问个数
for (int i = 0; i < m; i++) {
int l = scanner.nextInt(); // 开始
int r = scanner.nextInt(); // 结束
int k = scanner.nextInt(); // 指定索引元素
int temp[] = new int[r - l + 1];
int index1 = 0; // 定义下标1
for (int j = l - 1; j <= r - 1; j++) { // 指定范围给新的数组
temp[index1++] = arr[j];
}
Arrays.sort(temp); // 对该数组进行排序
int down[] = new int[temp.length]; // 定义数组取长度
int index2 = temp.length - 1; // 定义下标2
for (int j = 0; j < down.length; j++) { // 将排好序的数组按倒序方式给下一个新 的数组
down[j] = temp[index2--];
}
System.out.println(down[k - 1]); // 输出新数组指定索引位置元素
}
}
}