)
题目描述有一个排过序的数组,包含n个整数,但是这个数组向左进行了一定长度的移位,例如,原数组为[1,2,3,4,5,6],向左移位5个位置即变成了[6,1,2,3,4,5],现在对于移位后的数组,需要查找某个元素的位置。请设计一个复杂度为log级别的算法完成这个任务。给定一个int数组A,为移位后的数组,同时给定数组大小n和需要查找的元素的值x,请返回x的位置(位置从零开始)。保证数组中元素互异。测试样例:[6,1,2,3,4,5],6,6返回:0思路:还是二分查找没变。变得是每次调整end 和start 的时候,需要把可能的乱序情况考虑进去。当 A[mid] x 的时候, 乱序是X 在数组的前半段,因为数组中大的都被移到的前面。那么一定需要条件 X A[end] 并且 A[mid] A[Start]。当A[mid] x 的时候, 乱序是X 在数组后面。也就是 小数在数组的最后面。那么一定有 A[mid] A[start] x A[start]其他的情况就是正常的二分查找。class Finder { public: int findElement(vectorint A, int n, int x) { int left=0,right=n-1; int mid; while(left=right){ mid=(left+right)1; if(A[mi