algorithm - 惯用 Go 中 set 的最小值

标签 algorithm go set idioms

如何在 go 中编写返回集合最小值的函数?我不只是在寻找解决方案(我知道我可以在遍历第一个元素时只初始化最小值,然后设置一个我初始化最小值的 bool 变量),而是一个惯用的解决方案。由于 go 没有原生集,假设我们有一个 map[Cell]bool

最佳答案

Map 是 Go 中实现集合的惯用方式。惯用代码使用 bool 或 struct{} 作为映射的值类型。后者使用的存储空间较少,但需要在键盘上输入更多内容才能使用。

假设单元格的最大值为 maxCell,则此函数将计算最小值:

func min(m map[Cell]bool) Cell {
    min := maxCell
    for k := range m {
        if k < min {
            min = k
        }
    }
    return min
}

如果 Cell 是数字类型,那么 maxCell 可以设置为 math constants 之一.

任何使用 map 的解决方案都需要对键进行循环。

你可以保留一个heap除了 map 找到一个最小值。这将需要更多的存储空间和代码,但效率会更高,具体取决于集合的大小和调用最小函数的频率。

关于algorithm - 惯用 Go 中 set 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063380/

相关文章:

c++ - 将集合附加到另一个集合

c++ - 如何为C++设置多个数据类型?

python - 找出键盘上字母之间的距离

java - k 均值和 c 均值之间的差异

go - 将 Strings.Builder 转换为字节数组的最有效方法

dictionary - 映射值可以是变量类型吗?

go - 如何在 Golang Walk 中提前终止?

java - arraylist 字符串中的插入排序 Java 算法

algorithm - 循环的增长顺序

f# - 在 F# : is Set adequate? 中采样