生成旋转数组
假设需要将{1,2,3,4,5}左移2位生成{3,4,5,1,2}。可以将整个数组反转{5,4,3,2,1},再将后k个数,即2个反转,前n-k个数,即5-2=3个数反转,{3,4,5,1,2}。
基于非递减旋转数组的二分查找
对于数组a,low指向最低位,high指向最高位,mid=(low+high)/2。
情况1:a[mid]<a[high],说明mid位于右边的非递减数列,所以如果查找目标大小位于a[high]和a[mid]之间,low=mid+1,否则high=mid-1。
情况2:a[mid]>a[high],说明mid位于左边的非递减数列,所以如果查找目标大小位于a[low]和a[mid]之间,high=mid-1,否则low=mid+1。
情况3:a[mid]==a[high], 判断不了mid位于哪块数列,只能遍历,high--。