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