zoukankan      html  css  js  c++  java
  • 旋转数组的最小数字

    题目描述:

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

    #include <iostream>
    using namespace std;
    
    int MinInOrder(int* numbers, int index1, int index2)	//针对{1,0,1,1,1}这种特例数组,写出该函数。
    {
    	int result = numbers[index1];
    	for (int i = index1+1; i <= index2; i++)
    	{
    		if (numbers[i] < result)
    		{
    			result = numbers[i];
    		}
    	}
    	return result;
    }
    
    int Min(int* numbers, int length)
    {
    	if (numbers == NULL || length <= 0)
    	{
    		cout<<"error...\n";
    	}
    
    	int index1 = 0;
    	int index2 = length-1;
    	int indexMid = 0;
    	while (numbers[index1] >= numbers[index2])
    	{
    		if (index2-index1 == 1)
    		{
    			indexMid = index2;
    			break;
    		}
    		indexMid = (index1 + index2)/2;
    		if (numbers[index1] == numbers[index2] && numbers[index1] == numbers[indexMid])
    		{
    			return MinInOrder(numbers, index1, index2);
    		}
    		if (numbers[indexMid] >= numbers[index1])
    		{
    			index1 = indexMid;
    		}
    		else if (numbers[indexMid] <= numbers[index2])
    		{
    			index2 = indexMid;
    		}
    	}
    	return numbers[indexMid];
    }
    
    int main()
    {
    	int a[] = {1,0,1,1,1};
    	int b[] = {3,4,5,1,2};
    	cout<<Min(a,5)<<endl;
    	cout<<Min(b,5)<<endl;
    }


     

  • 相关阅读:
    Final Zadanie 题解
    CF1096E The Top Scorer 题解
    [SDOI2008]Sue的小球 题解
    柱爷与远古法阵 题解
    [ZOJ3329] One Person Game 题解
    扑克牌 题解
    CF494C Helping People 题解
    CF1025D Recovering BST 题解
    linux基础学习-Raid 0 1 5 10的原理、特点、性能区别
    linux基础学习-CentOS7.5用户管理
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3013697.html
Copyright © 2011-2022 走看看