gpt4 book ai didi

求解旋转数组的最小数字

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章求解旋转数组的最小数字由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

求解旋转数组的最小数字 。

题目描述:

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

思路解析:

O(N)的算法 。

这种算法的思想就是遍历这个数组,由于这个数组是两部分有序的数组,因此遍历这个数组时当后一个数字小于前一个数字时,则后一个(即较小)一定为整个数组中最小的数字.

这种算法的思想很简单,但就是时间复杂度较大,因此不是很好的算法.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
int minNumberInRotateArray(vector< int > rotateArray)
{
   if (rotateArray.empty())
     return - 1 ;
 
   unsigned int i= 0 ;
   for (; i<rotateArray.size()- 1 ; i++)
   {
     if (rotateArray[i] > rotateArray[i+ 1 ])
       break ;
   }
   return rotateArray[i+ 1 ];
}

O(logN)的算法 。

这种算法思想类似于二分查找,首先每次找到数组中中间的数字mid,如果mid大于最左端left,说明最小数在mid的右侧区间,则改变left,置left为mid;如果mid小于数组右侧right,说明最小数在mid的左侧区间,则改变right为mid….当left的数字小于等于right的数字时,说明已经找到最小数,这个也是循环结束的条件 。

求解旋转数组的最小数字

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int minNumberInRotateArray(vector< int > rotateArray)
{
   if (rotateArray.empty())
     return - 1 ;
   unsigned int left= 0 ;
   unsigned int right=rotateArray.size()- 1 ;
   unsigned int mid=left;
   while (rotateArray[left] >= rotateArray[right])
   {
     if (right-left == 1 )
     {
       mid = right;
       break ;
     }
     mid = left+((right-left)>> 1 );
 
     if (rotateArray[mid]==rotateArray[left] && rotateArray[right]==rotateArray[mid])
       return rotateArray[mid];
 
     if (rotateArray[mid] >= rotateArray[left])
       left = mid;
     else if (rotateArray[mid] <= rotateArray[right])
       right = mid;
   }
   return rotateArray[mid];
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 。

原文链接:http://blog.csdn.net/qq_33951180/article/details/72730144 。

最后此篇关于求解旋转数组的最小数字的文章就讲到这里了,如果你想了解更多关于求解旋转数组的最小数字的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com