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

2023-08-20
1分钟阅读时长

数组中的第K个最大元素

//解法一
type IntHeap []int
func (h IntHeap) Len()  int {
	return len(h)
}
func (h IntHeap) Less(i,j int) bool {
	return h[i] < h[j]
}
func (h IntHeap) Swap(i,j int)  {
	h[i],h[j] = h[j],h[i]
}
func (h IntHeap) Top() int {
	return h[0]
}
func (h *IntHeap) Push(x interface{})  {
	*h = append(*h, x.(int))
}
func (h *IntHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[0:n-1]
	return x
}

func findKthLargest(nums []int,k int) int{
	h := &IntHeap{}
	heap.Init(h)
	for _,num := range nums{
		if h.Len() < k{
			heap.Push(h,num)
		}else if (*h)[0] < num{
			heap.Pop(h)
			heap.Push(h,num)
		}
	}
	return heap.Pop(h).(int)
}
//解法二
func findKthLarget(nums []int,k int) int{
	rand.Seed(time.Now().UnixNano())
	return quickSelect(nums,0,len(nums)-1,k)
}

func quickSelect(nums []int,l, r int, k int) int{
	m := randomPartition(nums,l,r)
	if r - m + 1 == k{
		return nums[m]
	}else if r-m+1 > k{
		return quickSelect(nums,m+1,r,k)
	}else{
		return quickSelect(nums,l,m-1,k-(r-m+1))
	}
}

func randomPartition(nums []int,l,r int) int{
	i := rand.Int() % (r - l + 1) + l
	nums[i],nums[r] = nums[r],nums[i]
	return partition(nums,l,r)
}

func partition(nums []int,l int,r int) int{
	key := nums[r]
	i := l
	j := l
	for j < r{
		if nums[j] < key{
			nums[i],nums[j] = nums[j],nums[i]
			i++
		}
		j++
	}
	nums[i],nums[r] = nums[r],nums[i]
	return i
}

本主题指南

技术实践与开发文档
  • 深入探究一下Kubernetes Operator Pattern,为CustomResourceDefinition使用贡献有效经验

    Kubernetes让部署和无感知扩容变的异常简单。如果实操,基本上只需要在YAML文件中把相关联的应用的参数做下指定即可,然后提交给Kubernetes系统识别你的声明式指令,Kubernetes内建的状态循环机制就会自动的创建或者销毁相应资源,来把集群调整到我预设的状态上来,一切都如此轻松!

  • 如何从头创建一个KubernetesOperator

    对于什么是`controller`什么是`operator`可能大家有比较多的迷惑,特别对于你不是做`Kubernetes`领域相关工作的,可能就更像听天书。简明扼要给出我的理解,`operators`是一种特别的`controller`。区别在于`operators`中针对于`controller`可能会包含进更多特定的负载相关的知识。 那么下个问题就出现了,什么是`controller`?

  • Client Go四种交互模式之 DynamicClient实战案例详解

    Client Go四种交互模式之 DynamicClient实战案例详解

  • 对于kubernetes体系课的录制自己的一些思考

    由于天天要搞的事情太多,所以准备录云原生kubernetes课程的事情一拖再拖!但好消息是这个周末终于录了网络接口(CNI)第三方厂商中的佼佼者flannel和calico的实践!以及istio的实践!虽然都只是一部分,但是能迈出这一步,感觉已经是巨大的进步了,因为如果找借口可能天天都有借口,但是时间嘛,挤一挤总是有的!

Avatar

Aisen

Be water,my friend.