golang 寻找第K大

2021-05-24  本文已影响0人  MrBryan
## 题目描述

有一个整数数组,请你根据快速排序的思路,找出数组中第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)
}
上一篇 下一篇

猜你喜欢

热点阅读