1. 程式人生 > >藍橋杯Java練習——求最大數

藍橋杯Java練習——求最大數




    [12,127,85,66,27,34,15,344,156,344,29,47,....] 

    這是某裝置測量到的工程資料。

    因工程要求,需要找出最大的5個值。

    一般的想法是對它排序,輸出前5個。但當資料較多時,這樣做很浪費時間。因為對輸出資料以外的資料進行排序並非工程要求,即便是要輸出的5個數字,也並不要求按大小順序,只要找到5個就可以。

    以下的程式碼採用了另外的思路。考慮如果手裡已經抓著5個最大數,再來一個資料怎麼辦呢?讓它和手裡的資料比,如果比哪個大,就搶佔它的座位,讓那個被擠出來的再自己找位子,....

import java.util.*;
public class Main
{
	public static List<Integer> max5(List<Integer> lst)
	{
		if(lst.size()<=5) return lst;
		
		int a = lst.remove(0);  // 填空
		List<Integer> b = max5(lst);
		
		for(int i=0; i<b.size(); i++)
		{
			int t = b.get(i);
			if(a>t)
			{
				b.set(i,a);  // 填空
				a = t;  
			}
		}
			
		return b;
	}
	
	public static void main(String[] args)
	{
		List<Integer> lst = new Vector<Integer>();
		lst.addAll(Arrays.asList(500,127,85,66,27,34,15,304,156,344,29,47));		
		System.out.println(max5(lst));
	}
}