golang 寻找第K大

## 题目描述

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

示例1

## 输入
[1,3,5,2,2],5,3

## 返回值

2

golang 代码如下


import (
   "fmt"
   "testing"
)

/**
*
* @param a int整型一维数组
* @param n int整型
* @param K int整型
* @return int整型
*/
func findKth(a []int, n int, K int) int {
   // write code here
   if K > n {
       return 0
   }
   ret := sort(a, 0, len(a)-1, K)
   return ret
}

func sort(a []int, l, h, K int) int {
   middleIndx := l
   for l+1 <= h {
       if a[l+1] >= a[middleIndx] {
           a[l+1], a[middleIndx] = a[middleIndx], a[l+1]
           middleIndx++
       }
       l++
   }
   fmt.Println(a, l, h, K)
   if K == middleIndx+1 {
       return a[middleIndx]
   } else if K < middleIndx+1 {
       return sort(a, 0, middleIndx-1, K)
   } else {
       return sort(a, middleIndx+1, len(a)-1, K)
   }
}

func TestQuick(t *testing.T) {
   arr := []int{10, 3, 5, 6, 11, 12, 19, 33}
   ret := findKth(arr, len(arr), 1)
   fmt.Println(ret)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容