【牛客刷题】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。不得不说编译型的语言在执行效率上就是厉害。

posted @ 2023-02-13 09:27  wingsless  阅读(87)  评论(0编辑  收藏  举报