编程题:旋转数组的最小数字

来源:互联网 发布:考研形势数据图表分析 编辑:程序博客网 时间:2024/06/13 13:29

1.分析思路

   这道题你要是看清楚它的本质了,其实就是一道二分查找变形的题目。旋转之后的数组实际上可以划分为两个子数组部分。左边的数组大小都大于或者等于右边的数组大小。而要找的最小元素就是右边数组的第一个元素。

2.方法一

 从头选取数组元素将它与数组第一个元素相减的值记为P1,将当前选取的数组元素减去当前选取数组加一的元素值记为P2.如果P1小于P2,则当前选取数组加一的元素即为最小值。f否则,一直循环下去。如果循环到最终,都是P1小于P2,则直接返回第一个元素,它即为最小。代码如下:


3.方法二

找到数组的中间元素。

中间元素大于第一个元素,则中间元素位于前面的递增子数组,此时最小元素位于中间元素的后面。我们可以让第一个指针left指向中间元素。移动之后,第一个指针仍然位于前面的递增数组中。中间元素小于第一个元素,则中间元素位于后面的递增子数组,此时最小元素位于中间元素的前面。我们可以让第二个指针right指向中间元素。移动之后,第二个指针仍然位于后面的递增数组中。这样可以缩小寻找的范围。


1 0
原创粉丝点击