1. 程式人生 > 其它 >date7.22 區間K大數查詢

date7.22 區間K大數查詢

區間K大數查詢

問題描述


給定一個序列,每次詢問序列中第1個數到第r個數中第K大的數是哪個。

輸入格式


第一行包含一個數n,表示序列長度。
第二行包含n個正整數,表示給定的序列。
第三行包含一個正整數m,表示詢問個數。
接下來m行,每行三個數1,r,K,表示詢問序列從左到右第一個數到第r個數中,從大往小第K大的數是哪個。序列元素從1開始標號。

輸出格式


總共輸出m行,每行一個數,表示詢問的答案。

樣例輸入

5
1 2 3 4 5
2
1 5 2
2 3 2

樣例輸出

4
2

思路


通過for迴圈來輸入數列和輸出正整數後的m行。新建一個數組將指定範圍元素賦予其中,然後通過arrys類的sort方法進行排序,將排好序的陣列在倒序賦給下一個新陣列,後輸出新陣列指定的牽引位置。

程式碼

package daily;

import java.util.Arrays;
import java.util.Scanner;

public class d7_22 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        int m = sc.nextInt();//指定詢問個數
        int[] arr2 = new int[m];
        for (int i = 0; i < m; i++) {
            int start = sc.nextInt();
            int end = sc.nextInt();
            int k = sc.nextInt();
            //輸入起始位置、結束位置、指定索引元素
            int[] temp = new int[end-start+1];
            int index=0;
            //將指定範圍元素賦給新的陣列
            for (int j = start-1; j <= end-1; j++) {
                temp[index++]=arr[j];
            }
            Arrays.sort(temp);//對該陣列進行排序
            int[] downsort = new int[temp.length];
            int index2 = temp.length-1;
            //將排好序的陣列按倒序方式賦給下一個新的陣列
            for (int j = 0; j < downsort.length; j++) {
                downsort[j] = temp[index2--];
            }
            arr2[i] = downsort[k-1];
        }
        for(int i = 0 ;i < m;i++) {
            System.out.println(arr2[i]);//輸出新陣列指定索引位置元素
        }
    }
}