藍橋杯Java練習——求最大數
阿新 • • 發佈:2019-02-01
[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)); } }