這題有兩個要編碼解決的問題,首先是去重,其次是排序。
最開始想着就用Java的TreeSet解決了,簡單好用,去重排序都一併解決了,編碼只需要考慮input的邏輯就可以,代碼如下:
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
// 注意類名必須爲 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的區別
while (in.hasNext()) { // 注意 while 處理多個 case
int a = in.nextInt();
Set<Integer> set = new TreeSet<>();
for (int i = 0; i < a; i++) {
set.add(in.nextInt());
}
set.forEach(System.out::println);
}
}
}
實際上的執行時間179ms。現在學習Go語言的時候發現Go沒有內置特別多好的數據結構,如果要在此時手動寫一個TreeSet代價有點太大。
從別人的思路里看到了一種利用數組的解法,比較巧妙的用數組下標解決了排序問題,代碼邏輯如下:
package main
import "fmt"
func main() {
a := 0
fmt.Scan(&a)
arr := make([]int, 501)
n := 0
for i := 1; i <= a; i++ {
fmt.Scan(&n)
if arr[n] == 0 {
arr[n] = 1
} else {
continue
}
}
for i, v := range arr {
if v == 1 {
fmt.Printf("%d\n", i)
} else {
continue
}
}
}
執行時間只有6ms。不得不說編譯型的語言在執行效率上就是厲害。