golang 703数据流中的第K大元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 703数据流中的第K大元素相关的知识,希望对你有一定的参考价值。

import "container/heap"

type IntHead []int

func (this IntHead) Len() int { return len(this) }
func (this IntHead) Less(i, j int) bool {
	return this[i] < this[j]
}
func (this IntHead) Swap(i, j int) {
	this[i], this[j] = this[j], this[i]
}
func (this *IntHead) Push(x interface{}) {
	*this = append(*this, x.(int))
}
func (this *IntHead) Pop() interface{} {
	old := *this
	n := len(old)
	x := old[n-1]
	*this = old[0 : n-1]
	return x
}

type KthLargest struct {
	Size int
	Data *IntHead
}

func Constructor(k int, nums []int) KthLargest {
	min := &IntHead{}
	heap.Init(min)
	kth := KthLargest{Size: k, Data: min}
	for _, num := range nums {
		kth.Add(num)
	}
	return kth
}

func (this *KthLargest) Add(val int) int {
	if this.Data.Len() == 1 && (*this.Data)[0] == 0 && val == -1 {
		min := &IntHead{-1, 0}
		heap.Init(min)
		this.Data = min
	}
	if this.Data.Len() < this.Size {
		heap.Push(this.Data, val)
	} else if (*this.Data)[0] < val {
		heap.Pop(this.Data)
		heap.Push(this.Data, val)
	}
	return (*this.Data)[0]
}


/**
 * Your KthLargest object will be instantiated and called as such:
 * obj := Constructor(k, nums);
 * param_1 := obj.Add(val);
 */

【golang】解决etcd安装出现的问题

参考技术A 解决办法修改依赖版本:

在GOPATH/src下执行

在go mod里加入

以上是关于golang 703数据流中的第K大元素的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 堆 - 数据流中的第 K 大元素, leetcode 703

⭐算法入门⭐《堆》中等02 —— LeetCode 703. 数据流中的第 K 大元素

Leetcode刷题100天—703. 数据流中的第 K 大元素(优先队列)—day16

Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解

leetcode 简单题

golang 215数组中的第K个最大元素