这题应该是用快排的思想:例如找49个元素里面第24大的元素,那么按如下步骤: 1.进行一次快排(将大的元素放在前半段,小的元素放在后半段),假设得到的中轴为p 2.判断 p - low + 1 == k ,如果成立,直接输出a[p],(因为前半段有k - 1个大于a[p]的元素,故a[p]为第K大的元素) 3.如果 p - low + 1 > k, 则第k大的元素在前半段,此时更新high = p - 1,继续进行步骤1 4.如果p - low + 1 < k, 则第k大的元素在后半段, 此时更新low = p + 1, 且 k = k - (p - low + 1),继续步骤1. 由于常规快排要得到整体有序的数组,而此方法每次可以去掉“一半”的元素,故实际的复杂度不是o(nlgn), 而是o(n)。
点赞

相关推荐

野猪不是猪🐗:蓝桥杯省三去了,你把省三写上去就等于告诉人家你连前30%都没进,纯负面作用; 天池新闻感觉比较入门级了,有对口实习了感觉这个就可以去掉了,第一个项目可以展开写写补上空位
点赞 评论 收藏
分享
牛客网
牛客企业服务