题解 | #寻找第K大#

寻找第K大

https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param a int整型一维数组
 * @param n int整型
 * @param K int整型
 * @return int整型
 */
func findKth(a []int, n int, K int) int {
	// write code here
	K = n - K // 第k大的数在排序数组中索引为 n - k 的位置
	left, right := 0, n-1
	for left <= right {
		privotIndex := partition(a, left, right)
		// privotIndex == len - k  即当前为第K个大元素
		// privotIndex < len - k   在[privoteIndex + 1,right]中继续查找
		// privotIndex > len - k   在[left,privoteIndex - 1]中继续查找
		if privotIndex == K {
			return a[privotIndex]
		} else if privotIndex < K {
			left = privotIndex + 1
		} else {
			right = privotIndex - 1
		}
	}
	return -1
}

func partition(nums []int, left, right int) int {
	// 基准, 比基准小的元素移动到基准的左边,比基准大的元素移动到基准的右边
	pivot := nums[left]
	l, r := left+1, right
	for l <= r {
		if nums[r] > pivot {
            r--
        }else{
            nums[l], nums[r] = nums[r], nums[l]
            l++
        }
	}
	nums[left], nums[l-1] = nums[l-1], nums[left]
	return l - 1
}

全部评论

相关推荐

能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务