Description
找到给定数组的给定区间内的第K小的数值。
Input
输入第一行为用例个数, 每个测试用例输入的第一行为数组,每一个数用空格隔开;第二行是区间(第几个数到第几个数,两头均包含),两个值用空格隔开;第三行为K值。
Output
结果
Sample Input 1
1
1 2 3 4 5 6 7
3 5
2
Sample Output 1
4
思路:使用暴力,先取出来数组arr[],还有区间[left,right]
将区间内的数取出来成为一个新的数组arr1[],排序
输出arr1[k-1];
import java.util.ArrayList;
import java.util.Scanner;
public class MainMin {
public static int Min(int[] arr,int left,int right,int k){
/*System.out.println(left);
System.out.println(right);*/
//将区间内的数取出来成为一个新的数组arr1[]
int[] arr1=new int[right-left+1];
ArrayList<Integer> list=new ArrayList<>();
for (int i = left-1; i <right ; i++) {
list.add(arr[i]);
}
for (int i = 0; i <list.size() ; i++) {
arr1[i]=(int)list.get(i);
}
//排序
int[] arr2=new int[right-left+1];
arr2=bubbleSort(arr1);
return arr2[k-1];
}
//冒泡排序
public static int[] bubbleSort(int[] arr){
int n=arr.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j <n-1; j++) {
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String n=sc.nextLine();
int n1=Integer.parseInt(n);
for (int i = 0; i <n1 ; i++) {
//待处理数组
String str=sc.nextLine();
String[] arr=str.split(" ");
int[] array=new int[arr.length];
for (int j = 0; j <arr.length ; j++) {
array[j]=Integer.parseInt(arr[j]);
}
//区间两端
String[] arr1=sc.nextLine().split(" ");
int left=Integer.parseInt(arr1[0]);
int right=Integer.parseInt(arr1[1]);
//取出k
String str2=sc.nextLine();
int k=Integer.parseInt(str2);
//计算第k小的数值
int min= Min(array,left,right,k);
System.out.println(min);
}
}
}