HJ3 明明的随机数-JavierWu

发布于 2023-10-26  11 次阅读


牛客网:HJ3 明明的随机数
https://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0?tpId=37&tqId=21226&ru=/exam/oj

在这里插入图片描述
使用Go语言解题,最简单的方式:
解题一:

// 运行时间:5ms 占用内存:1180KB
package main

import (
	"fmt"
	"sort"
)

func main() {
	var n int
	num := make([]int, 0, n)
	_, _ = fmt.Scan(&n)
	set := make(map[int]struct{}, n)
	for i := 0 i < n i++ {
		var tmp int
		_, _ = fmt.Scan(&tmp)
		if _, ok := set[tmp] ok {
			continue // 重复值跳过
		}
		set[tmp] = struct{}{}
		num = append(num, tmp)
	}
	sort.Ints(num)
	for _, number := range num {
		fmt.Println(number)
	}
}

解题比较暴力,直接去重后再排序,思索后,觉得应该有所优化,从样例数据来看,数据量并不大,似乎可以用哈希表解题;
解题二:

// 运行时间:5ms 占用内存:1052KB
package main

import (
	"fmt"
)

func main() {
	var n int
	_, _ = fmt.Scan(&n)
	set := make([]int, 500, 500)
	for i := 0 i < n i++ {
		var tmp int
		_, _ = fmt.Scan(&tmp)
		set[tmp] = tmp
	}
	for _, number := range set {
		if number != 0 {
			fmt.Println(number)
		}

	}
}

提交后,发现与第一种代码的运行时间和内存占比相差不大,开始查阅排行榜大哥代码,发现耗时原因出现在数据的录入上,修改代码重新提交
解题三:

//运行时间:4ms 占用内存:1308KB
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scan := bufio.NewScanner(os.Stdin)
	scan.Scan()
	if len(scan.Text())==0{
		return
	}
	n,_:=strconv.Atoi(scan.Text())
	set := make([]int, 500, 500)
	for i := 0 i < n i++ {
		scan.Scan()
		tmpStr := scan.Text()
		tmp,_:=strconv.Atoi(tmpStr)
		set[tmp] = tmp
	}
	for _, number := range set {
		if number != 0 {
			fmt.Println(number)
		}
	}
}

运行时间缩短了1ms,内存涨了250kb,再次修改代码
解题四:

// 运行时间:4ms 占用内存:1096KB
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scan := bufio.NewScanner(os.Stdin)
	scan.Scan()
	if len(scan.Text())==0{
		return
	}
	n,_:=strconv.Atoi(scan.Text())
	set := make([]bool, 500, 500)
	for i := 0 i < n i++ {
		scan.Scan()
		tmpStr := scan.Text()
		tmp,_:=strconv.Atoi(tmpStr)
		set[tmp] = true
	}
	for number, v := range set {
		if v == true {
			fmt.Println(number)
		}
	}
}

内存缩小,时间未变,不太理解,找到排行榜第一的代码进行提交,终于找到原因:
在这里插入图片描述
相同的代码,运行时间差距和内存差距,存在于牛客网的测评机,与代码无关,放弃挣扎;使用哈希表和sort在数据量不大的情况下,解决这道题,没有过多优化。
var code = “13a64cc1-7586-400d-929c-e2cf7eb89558”

届ける言葉を今は育ててる
最后更新于 2023-10-26