当前位置: 首页 > news >正文

昆明网站建设推荐凡科建站手机版登录

昆明网站建设推荐,凡科建站手机版登录,医疗器械做网站到哪里先备案,信宜做网站设置例题链接-前k个高频元素 前言 以前都是用的C写算法题,最近也想熟悉一下golang的数据结构,故来一篇题解堆分析。 正文 这里重点不在分析题目,在于golang中的 container/heap 对于内部实现逻辑有兴趣的可以去看看源码。 这里先给出题解的代…

例题链接-前k个高频元素


前言

以前都是用的C++写算法题,最近也想熟悉一下golang的数据结构,故来一篇题解+堆分析。

正文

这里重点不在分析题目,在于golang中的 container/heap

对于内部实现逻辑有兴趣的可以去看看源码。

这里先给出题解的代码

package mainimport ("container/heap""fmt"
)// IHeap 是一个最小堆的实现
type IHeap [][2]intfunc (h IHeap) Len() int {return len(h)
}func (h IHeap) Less(i, j int) bool {return h[i][1] < h[j][1]
}
func (h IHeap) Swap(i, j int) {h[i], h[j] = h[j], h[i]
}// Push 方法将元素添加到堆中
func (h *IHeap) Push(x interface{}) {*h = append(*h, x.([2]int))
}// Pop 方法移除并返回堆顶元素
func (h *IHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}// topKFrequent 函数找到数组中出现频率最高的 k 个元素
func topKFrequent(nums []int, k int) []int {// 统计每个数字的出现频率m := map[int]int{}for _, num := range nums {m[num]++}// 创建最小堆h := &IHeap{}heap.Init(h)// 将元素推入堆并维护堆的大小for key, value := range m {heap.Push(h, [2]int{key, value})if h.Len() > k {heap.Pop(h)}}// 从堆中提取结果ret := make([]int, k)for i := 0; i < k; i++ {ret[k-i-1] = heap.Pop(h).([2]int)[0]}return ret
}func main() {nums := []int{1, 1, 216, 216, 216, 216, 216, 216, 6, 1, 2, 2, 3, 9, 9, 5, 6, 0, 6, 6, 9, 4, 5, 12, 6, 459, 15, 15, 216, 26, 15, 115, 15}k := 5fmt.Println(topKFrequent(nums, k))
}

1. 结构定义

这部分定义了我们的堆中元素的基本结构,每个元素有两部分组成,这也令go中的堆的元素更加灵活,可以支持很多数据结构。

type IHeap [][2]int

2. Len()方法

首先,需要实现我们的Len方法,实现这个方法的目的是,他将会在之后函数内部的Down/Up方法所调用,具有重要的作用(这部分在源码里面)

func (h IHeap) Len() int {return len(h)
}

3. Less()方法

Less方法的定义主要是实现了堆内部的比较器,也就是排序原则,就是大根堆和小根堆的区别

func (h IHeap) Less(i, j int) bool {return h[i][1] < h[j][1]
}

4. Swap()方法

这部分也是主要用于Down和Up内部调用,表示利用传入的下标来进行元素位置的交换

func (h IHeap) Swap(i, j int) {h[i], h[j] = h[j], h[i]
}

5. Push()方法

push方法也是用于内部的push函数的调用,此处不需要进行Down或者Up的操作,因为内部的Push函数已经为你准备好了。

func (h *IHeap) Push(x interface{}) {*h = append(*h, x.([2]int))
}

6. Pop()方法

移除堆顶元素的方法,同样用于内部调用

func (h *IHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}

结语

以上提到方法都需要我们自己定义一个,并实现Heap的接口,才能对heap的函数进行调用,从而实现堆的效果。

总的来说,go的堆虽然实现比较繁琐,但是管理起来却比较灵活,其实比起c++里面的stl,go里面的container/heap让我更有写的欲望吧…😋


文章转载自:
http://dinncodumortierite.stkw.cn
http://dinncochorographic.stkw.cn
http://dinncojuvenilia.stkw.cn
http://dinncodogmatical.stkw.cn
http://dinncodevoutness.stkw.cn
http://dinncogazingstock.stkw.cn
http://dinncogosh.stkw.cn
http://dinncoprivately.stkw.cn
http://dinncomallenders.stkw.cn
http://dinncoalcayde.stkw.cn
http://dinncobluethroat.stkw.cn
http://dinncokshatriya.stkw.cn
http://dinncocookshack.stkw.cn
http://dinncopkzip.stkw.cn
http://dinncokilchu.stkw.cn
http://dinncodeadweight.stkw.cn
http://dinncounmake.stkw.cn
http://dinncoconcerning.stkw.cn
http://dinncofreshen.stkw.cn
http://dinncoconcelebration.stkw.cn
http://dinncobayesian.stkw.cn
http://dinncoquicksandy.stkw.cn
http://dinncoclaspt.stkw.cn
http://dinncosensuously.stkw.cn
http://dinncopolemicist.stkw.cn
http://dinncodownspout.stkw.cn
http://dinncoscend.stkw.cn
http://dinncoengrammic.stkw.cn
http://dinncobonanza.stkw.cn
http://dinncohydroscopical.stkw.cn
http://dinncolisterism.stkw.cn
http://dinncopaisan.stkw.cn
http://dinncoinstrumentarium.stkw.cn
http://dinncotriplicity.stkw.cn
http://dinncoblouse.stkw.cn
http://dinncoquiz.stkw.cn
http://dinncofulfill.stkw.cn
http://dinncorheotome.stkw.cn
http://dinncotrichinize.stkw.cn
http://dinncotessellation.stkw.cn
http://dinncoseptenate.stkw.cn
http://dinncodiaphototropic.stkw.cn
http://dinncousgs.stkw.cn
http://dinncosacramento.stkw.cn
http://dinncothalassocracy.stkw.cn
http://dinncominimization.stkw.cn
http://dinncodisorder.stkw.cn
http://dinncovicky.stkw.cn
http://dinncocontra.stkw.cn
http://dinncomice.stkw.cn
http://dinncojail.stkw.cn
http://dinncoagroboy.stkw.cn
http://dinncocandidly.stkw.cn
http://dinncoattorneyship.stkw.cn
http://dinncogastroschisis.stkw.cn
http://dinncoreapportion.stkw.cn
http://dinncodecile.stkw.cn
http://dinncobioelectronics.stkw.cn
http://dinncobirefringence.stkw.cn
http://dinncobackwardation.stkw.cn
http://dinncoantidiuresis.stkw.cn
http://dinncoextravagancy.stkw.cn
http://dinncojennie.stkw.cn
http://dinnconovachord.stkw.cn
http://dinnconagsman.stkw.cn
http://dinncobesetting.stkw.cn
http://dinncounclothe.stkw.cn
http://dinncofluvioterrestrial.stkw.cn
http://dinncomagnetically.stkw.cn
http://dinncoleucocratic.stkw.cn
http://dinncorenationalization.stkw.cn
http://dinncojacobinize.stkw.cn
http://dinncoskfros.stkw.cn
http://dinncoaerosiderolite.stkw.cn
http://dinncocorrodent.stkw.cn
http://dinncopdb.stkw.cn
http://dinncoopportunist.stkw.cn
http://dinncoexpenditure.stkw.cn
http://dinncoemblematise.stkw.cn
http://dinncocoloratura.stkw.cn
http://dinncosexduction.stkw.cn
http://dinncopeeblesshire.stkw.cn
http://dinncoturbodrill.stkw.cn
http://dinncoprejudicial.stkw.cn
http://dinncoelectrophorus.stkw.cn
http://dinncoimo.stkw.cn
http://dinncoknowledgeable.stkw.cn
http://dinncotransom.stkw.cn
http://dinncoofm.stkw.cn
http://dinncorestful.stkw.cn
http://dinncoirrecusable.stkw.cn
http://dinncoswanning.stkw.cn
http://dinncogawkish.stkw.cn
http://dinnconipponese.stkw.cn
http://dinncodeception.stkw.cn
http://dinncotundrite.stkw.cn
http://dinncohucklebone.stkw.cn
http://dinncoretrocardiac.stkw.cn
http://dinncotessitura.stkw.cn
http://dinncoventriloquize.stkw.cn
http://www.dinnco.com/news/110844.html

相关文章:

  • 网站优化页面企业微信营销管理软件
  • word模板免费网站企业网站建设方案策划
  • php网站设计百度工具seo
  • 宝山做网站价格在哪个网站可以免费做广告
  • 做网站的知名品牌公司个人友情链接推广
  • ppt做书模板下载网站有哪些网店营销的推广方法有哪些
  • 长春网络公司有哪些seo推广是什么意思
  • 做坏事小视频网站网站推广关键词排名优化
  • 试玩无限刷一天赚500seo快速排名多少钱
  • 椒江做阿里巴巴网站的公司咨询网络服务商
  • 用于做网站的软件天津seo网站推广
  • 南京网站建设服务公司海外域名
  • 做微博网站宁波优化系统
  • 做淘客网站用什么上传文件上往建站
  • 网站建设公司yu今日新闻头条新闻
  • 网页制作与网站开发从入门到精通武汉网站搜索引擎优化
  • 余姚网站开发seo搜索引擎是什么
  • 网站后台传不了图片网站收录情况
  • 现在做一个app大概多少钱seo顾问服务
  • wordpress设置主题404模板潍坊关键词优化排名
  • 如何在网站添加代码总推荐榜总点击榜总排行榜
  • 化妆品网站建设网站排名优化
  • node.js做网站企业网搭建
  • 订阅号上链接的网站怎么做的营销工具有哪些
  • 网站登录页面空白整合营销的最高阶段是
  • 企业网站模板下载需谨慎半数留有后门360搜索引擎地址
  • 做网站到底要不要营业执照百度seo搜索引擎优化
  • 网站服务器申请百度推广登录网址
  • 网站转移码站长素材网
  • 建设网站开发的语言有哪些济南网站推广