date7.22 區間K大數查詢
阿新 • • 發佈:2021-07-25
區間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]);//輸出新陣列指定索引位置元素 } } }