剑指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

会导致判断失误

原文地址:https://www.cnblogs.com/Cherrylalala/p/6480721.html