一个长度为n的数组A,它是循环排序的,也就是说它的最小元素未必在数组的开头,而是在下标i,于是就有A[i]数组就是循环排序的:
378, 478, 550, 631, 103, 203, 220, 234, 279, 368, 370, 374
给定一个排序数组...解答这道题的关键是要找到数组中的最小值,由于最小值不一定在开头,如果它在数组中间的话,那么它一定具备这样的性质,假设第i个元素是最小值,那么有A[i-1]>A[i]在lg(n)时间内查找到最小值。
当找到最小值后,我们就很容易查找第k小的元素,如果k比最小值之后的元素个数小的,那么我们可以在从最小值开始的数组部分查找第k小的元素。...如果k比最小值之后的元素都要大,假设从最小值开始到最后一个元素,个数是t,那么我们只要在最小值前面的数组获取第k - t小的元素就可以了,具体实现如下:
public class BinarySearchInCyclicallySortedArray