牛魔王的故事
如果不允许用indexOf,其实这个是一个很有意思的题,可能很多人没有注意到这个是一个循环递增数组,意思是在数组中有一个最小值,其左边是最大值!!如果能很快定位这个值的位置,整个序列就变成了有序数组了,用折半查找就会比较快了,但如果没有定位,则折半查找是有一些问题的。具体实现functionMyindexOf(k,arr,l,h){if(l==h&&k!=arr[l])return-1;if(arr[l]==k)returnl;if(arr[h]==k)returnh;if(l>h){lett=h;h=l;l=t;}letm=Math.ceil((l+h)/2);if(arr[m]==k)returnm;if(m==h||m==l)return-1;//表明中间没有空位了,也排除了a[m]==a[l]和a[m]==a[h]的情况if(arr[l]k)returnMyindexOf(k,arr,l+1,m-1);returnMyindexOf(k,arr,m+1,h-1);}//下面是特殊二分法查找了,因为不可能有arr[l]==arr[h]了,所以不用判断arr[l]>arr[h]了,下面默认是arr[l]>arr[h]if(k>arr[l]){if(k>arr[m]){if(arr[m]>arr[l])returnMyindexOf(k,arr,m+1,h-1);//右returnMyindexOf(k,arr,l+1,m-1);//左}else{//k>arr[m]if(arr[m]>arr[l])returnMyindexOf(k,arr,l+1,m-1);//普左return-1;//arr[m]arr[h]与arr[m]