1。找到第K个最大的问题有一个无序的整数数组。请按照排序思路找出数组中第K大的数。给定一个整数数组a,请返回第K(1<=K<=n)个最大的数(包含重复元素,不去重),保证答案存在。示例输入[3,2,1,5,6,4],2返回值52。大致思路是先对无序数组进行排序,再对有序数组进行查找。至于选择什么排序算法,还有待确定。首先看各种排序算法的复杂度和稳定性。看完上面的对比,你心里可能已经有了自己的答案。3.解题思路常规思路需要两个步骤:首先,整体排序,就是在顺序中找到目标值。那么,对于这个问题,我们能否在排序的过程中确定目标值呢?想一下快排的二分特性:先找出一个值的位置,值的左边比自己小,右边比自己大(整个数组一分为二)然后进行运算分别在左侧和右侧部分执行步骤1,直到整个数组有序。这里需要知道的是,在快速排序中,某个值的左边比自己小,右边比自己大。这个值的位置就是最终有序数组中的位置,也就是说在搜索中可以确定目标位置。而且,在这道题的处理中,平均只处理了1/2的数据量。动画-快速排序算法快速排序算法搜索过程:4.Go代码实现funcfindKLargest(arr[]int,kint)int{iflen(arr)==0||k>len(arr){return-1}varfindfunc(kint,l,rint)intfind=func(kint,l,rint)int{/*//正常的快速排序,需要下面的代码ifl>=r{return}//但是这里不需要,寻找kth对于大数据,一般是l==r*/ll:=lrr:=rtarget:=arr[l]//倒序(第K大使用的)是target>=arr[r]/target<=arr[l]//正序(被kth使用)为target<=arr[r]/target>=arr[l]forl
