PAT乙級——1092(陣列排序 自定義sort)Java實現

熊仙森發表於2018-12-10

題目:最好吃的月餅 (20 分)

月餅是久負盛名的中國傳統糕點之一,自唐朝以來,已經發展出幾百品種。

在這裡插入圖片描述

若想評比出一種“最好吃”的月餅,那勢必在吃貨界引發一場腥風血雨…… 在這裡我們用數字說話,給出全國各地各種月餅的銷量,要求你從中找出銷量冠軍,認定為最好吃的月餅。

輸入格式:
輸入首先給出兩個正整數 N(≤1000)和 M(≤100),分別為月餅的種類數(於是預設月餅種類從 1 到 N 編號)和參與統計的城市數量。

接下來 M 行,每行給出 N 個非負整數(均不超過 1 百萬),其中第 i 個整數為第 i 種月餅的銷量(塊)。數字間以空格分隔。

輸出格式:
在第一行中輸出最大銷量,第二行輸出銷量最大的月餅的種類編號。如果冠軍不唯一,則按編號遞增順序輸出並列冠軍。數字間以 1 個空格分隔,行首尾不得有多餘空格。

輸入樣例:
5 3
1001 992 0 233 6
8 0 2018 0 2008
36 18 0 1024 4

輸出樣例:
2018
3 5

題目分析及實現

未AC

題目不難,就是簡單的陣列操作,不過排序要自己定義,但是總時長只有200ms,java語言會超時,這個我優化了好幾次沒找到解決辦法。

PAT還是一如既往的對java不友好,近幾年的題目400ms已經很常見了,java表現好點了,但是這種還是沒有辦法。

如有更好的解題辦法希望留言告訴我,跪謝 -_-!

//兩個超時,15分
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String one = in.readLine();
		String two[] = one.split(" ");
		int N = Integer.parseInt(two[0]);
		int M = Integer.parseInt(two[1]);
		Count[] counts = new Count[N];
		for (int i = 0; i < N; i++) {
			counts[i] = new Count();
			counts[i].index = i + 1;
		}		
		String[] input = new String[M];
		for (int i = 0; i < M; i++) {
			input[i] = in.readLine();
		}
		in.close();
		//累加計算每個種類的銷售量
		for (int i = 0; i < M; i++) {//行
			String[] temp = input[i].split(" ");
			for (int j = 0; j < N; j++) {//列
				counts[j].count += Integer.parseInt(temp[j]);
			}
		}
		Arrays.sort(counts);//按照自定義的排序規則排列
		System.out.println(counts[0].count);
		System.out.print(counts[0].index);
		int last = counts[0].count;
		for (int i=1;i<counts.length;i++) {
			if (last == counts[i].count) {//若與前面的值相等,則輸出
				System.out.print(" ");
				System.out.print(counts[i].index);
			}else 
				break;		
		}
	}
}

class Count implements Comparable<Count> {
	int index;
	int count;
	public int compareTo(Count p) {
		int result = this.count - p.count;
		if (result != 0)
			return -result;//從大到小排列
		else {
			return this.index - p.index;//從小到大排列
		}
	};
}

在這裡插入圖片描述

相關文章