题目描述:
比如一个原数组[1,3,5,7,9,10,13]
以任意一个数比如7作旋转操作得到一个新数组[7,9,10,13,1,3,5]
要求得到原数组的中位数的下标
注:题目中只知道旋转后的数组,不知道原数组,例如输入[5,1,3],输出2
如果数组长度为偶数,例如[3,5,7,1],则选择3或者5作为中位数都可以
要求用O(n)的方式实现。
面试中提供了一种思路:一是用快排先进行排序,再找中位数,时间复杂度是nlogn。
然而要求用O(n)
思路:中位数的特点是左边的数都比中位数小,而右边的数都比中位数大,且左边的数的个数和右边的个数是一样的(奇数个和偶数个有点不一样)。所以旋转后的数组是两个有序数组的拼接,那么一定会有一个奇点,那个奇点就是原数组的第一个数,找到第一个数再加上数组长度的一半再对数组长度取余就可以定位到中位数了
public class RotatedArray {
public static void main