南大高级算法作业之区间第k最小

input:

1

1 2 3 4 5 6 7

3 5

2

output:

4

  被nextInt换行搞得很难受,索性全用nextline,找第k小的数用优先队列加大根堆。

代码:

import java.util.*;


public class Main
{

    public static void main (String[] args){
    	
    	Scanner scan = new Scanner(System.in);
    	
    	int e_num = Integer.parseInt(scan.nextLine());
    	
    	int result = 0;
    	
    	while(e_num > 0){
    		
    		String[] num = scan.nextLine().split(" ");
    		
    		String[] sf = scan.nextLine().split(" ");
    		
    		int s_num = Integer.parseInt(sf[0]);
    		
    		int f_num = Integer.parseInt(sf[1]);
    		
    		int target = Integer.parseInt(scan.nextLine());

    		Queue<Integer> queue = new PriorityQueue<>();        
    		
    		for (int i = s_num-1; i < f_num; i++) {            
    			
    			queue.add(Integer.parseInt(num[i]));        
    			
    		}             
    		
    		while (target > 1) {            
    			
    			queue.poll();                             
    			
    			target --;
    		}        
    		
    		result = queue.peek();
    		
    		System.out.println(result);
    		
    		e_num --;
    		
    	}
    	
    }
       
}
发布了36 篇原创文章 · 获赞 2 · 访问量 2015

猜你喜欢

转载自blog.csdn.net/fumonster/article/details/102665340