Go语言版top-k算法
Posted 行走的皮卡丘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言版top-k算法相关的知识,希望对你有一定的参考价值。
Go语言版top-k算法
1、名词解释
在数组中找出最大的k
个数出来
如:
1
,3
,8
,6
,7
,5
,3
,2
,12
,38
,23
在这个数组中找出最大的2
个数出来
思路:如5个数,先取5个数,然后将5个数进行折半排序,剩下的元素进行循环,与里面的数据进行插入排序,思路:先取中间数据与循环中的数据进行比较,然后取出数据进行比较,循环结束,5个数取出
目前两个数的如下循环处理方式:
思路:取出两个数据进行排序,剩下的,如果大于当前的右边的数据则进行替代右边的,如果大于左边的替换左边的
/**
** 循环使用取出最大k值
*/
func numSort1(ss []int) []int
kk := ss[:2]
var t int
if kk[0] > kk[1]
t = kk[0]
kk[0] = kk[1]
kk[1] = t
for _,v := range ss[2:]
if v > kk[1]
kk[0] = kk[1]
kk[1] = v
else if v >= kk[0]
kk[0] = v
return kk
2、递归
思路同上,需要递归的时候进行递归循环测试,如第一次循环的数值,第二个,最后一个的值是否能打印。避免死循环
func numSort2(ss []int, n,min, max int) (int, int)
len := len(ss)
if (n == 0)
min = 0
max = ss[n:1][0]
return numSort2(ss, n+1, min, max)
else if(n < len)
v := ss[n:n+1][0]
if v > max
min = max
max = v
else if v > min
min = v
return numSort2(ss, n+1, min, max)
return min,max
3、top-2
package main
import "fmt"
func main()
var ss []int
ss = append(ss, 9,5,3,8,11,13,21,29,17,9,15,28,26,51,22)
//ss = ss[2:]
min,max := numSort2(ss, 0,0, 0)//递归
fmt.Println(min,max)
kk := numSort1(ss)//循环
fmt.Println(kk)
/**
** 循环使用取出最大k值
*/
func numSort1(ss []int) []int
kk := ss[:2]
var t int
if kk[0] > kk[1]
t = kk[0]
kk[0] = kk[1]
kk[1] = t
for _,v := range ss[2:]
if v > kk[1]
kk[0] = kk[1]
kk[1] = v
else if v >= kk[0]
kk[0] = v
return kk
/**
** 递归取出最大k值
*/
func numSort2(ss []int, n,min, max int) (int, int)
len := len(ss)
if (n == 0)
min = 0
max = ss[n:1][0]
return numSort2(ss, n+1, min, max)
else if(n < len)
v := ss[n:n+1][0]
if v > max
min = max
max = v
else if v > min
min = v
return numSort2(ss, n+1, min, max)
return min,max
以上是关于Go语言版top-k算法的主要内容,如果未能解决你的问题,请参考以下文章
《LeetCode刷题各语言(Java/C++/Go)版答案》pdf,我都给你搞到了
《LeetCode刷题各语言(Java/C++/Go)版答案》pdf,我都给你搞到了