コード例 #1
0
int findMinNumber(int* array, int length)
{
	if(NULL == array || length <= 0)
	{
		throw std::exception("invalid input.\n");
	}
	int start = 0;
	int end = length - 1;
	int middle = start;
	while(array[start] >= array[end])
	{
		if(start + 1 == end || start == end)
		{
			middle = end;
			break;
		}
		middle = (start + end) / 2;
		//如果下标start, middle, end所指向的数字相同, 只能采用顺序遍历
		if(array[start] == array[end] && array[start] == array[middle])
		{
			return minInOrder(array, start, end);
		}
		if(array[middle] >= array[start])
		{
			start = middle;
		}
		else
		{
			end = middle;
		}
	}
	return array[middle];
}
コード例 #2
0
ファイル: 8-minInRotate.c プロジェクト: masterpy/interview-2
int min(int *num,int length)
{
    if(num==NULL||length<=0)
        return -1;
    int index1=0,index2=length-1;
    int indexMid=index1;
    while(num[index1]>=num[index2])
    {
        if(index2-index1 == 1)
        {
            indexMid = index2;
            break;
        }
        indexMid=(index1+index2)/2;
        if(num[indexMid]==num[index1] && num[index1]==num[index2])
            return minInOrder(num,index1,index2);
        if(num[indexMid]>num[index1])
            index1=indexMid;
        else if(num[indexMid]<num[index2])
            index2=indexMid;
    }
    return num[indexMid];
}