剑指offer学习记录
面试题8:旋转数组的最小数字
几乎有序,首尾各一个index/pointer/数组的i,j
看好循环条件,(目前觉得,直接使用index2-1==index1好像就行,很奇怪,感觉应该可以,可以尝试一下明天
又看了一下,循环条件a[i]>=a[j]
保证了当把排序数组的前面0个元素搬到后面也是一个旋转 数组。
这其实在一开始直接排除即可。。
int findMin(int a[], int low, int high) { int i = low; int j = high; int mid; if (a[i] < a[j]) return a[i]; while ((i + 1) < j) { mid = (i + j) / 2;
if (a[mid] > a[i])
i = mid;
else if(a[mid]<a[j])
{
j = mid;
}
else if (a[mid] == a[i]||a[mid]==a[j])
{
顺序查找
break;
}
} return a[j]; }
写下来还算及格,
但是当 a[i]=a[j]=a[mid]的时候,
比如 1,0,1,1,1,1
会导致判断失误