美文网首页工作生活
Kth Largest Element in an Array

Kth Largest Element in an Array

作者: carlclone | 来源:发表于2019-07-01 13:51 被阅读0次

画图 / 变量,区间定义 / 伪代码

分区的操作和快排一模一样

这里的伪代码实际找的是第k-1小的数 , 因此在这里做了转换

第k大的数 = 第len-k+1小的数 len=end+1

然后实际是找第k-1索引处的数 , 因此为end+1-k+1-1
(其实这里的定义有点混乱了 , 不管怎样第一次Accepted了 , 之后再改进 )

LeetCode Kth Largest Element in an Array

结果

func partition(nums []int, start int, end int) int {
    p := start
    j := start + 1
    i := start

    v := nums[p]

    for j <= end {
        if nums[j] < v {
            tmp1 := nums[j]
            nums[j] = nums[i+1]
            nums[i+1] = tmp1

            i++
            j++
        } else if nums[j] >= v {
            j++
        }
    }

    tmp2:=nums[i]
    nums[i]=nums[p]
    nums[p]=tmp2

    p=i
    return p
}

func findKthLargest(nums []int, k int) int {

    start:=0
    end:=len(nums)-1

    //实际找的是第k-1小的数 , 因此在这里做了转换
    //第k大的数 = 第len-k+1小的数  len=end+1
    //然后实际是找第k-1索引处的数 , 因此为end+1-k+1-1
    return findKthLargestIn(nums,start,end,end+1-k+1-1)

}

func findKthLargestIn(nums []int, start int, end int, n int) int{
    k:=partition(nums,start,end)

    if k==n {
        return nums[k]
    }
    if k<n {
        return findKthLargestIn(nums,k+1,end,n)
    }
    if k>n {
        return findKthLargestIn(nums,start,k-1,n)
    }
    return 0
}


相关文章

网友评论

    本文标题:Kth Largest Element in an Array

    本文链接:https://www.haomeiwen.com/subject/gmsgcctx.html