【牛客刷題】HJ3 明明的隨機數

題目鏈接

這題有兩個要編碼解決的問題,首先是去重,其次是排序。

最開始想着就用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。不得不說編譯型的語言在執行效率上就是厲害。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章