剑指Offer之旋转数组中的最小数字(题8)

简介:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/****************************************
   2     > File Name:test.c
   3     > Author:xiaoxiaohui
   4     > mail:1924224891@qq.com
   5     > Created Time:2016年05月23日 星期一 20时07分13秒
   6 ****************************************/
  
  
  
  10  /*这是典型的类二分查找算法,只要找到分间线,就是其中最下的元素*/
  11 
  12 #include<stdio.h>
  13 
  14  int  min( int  *buf,  int  length)
  15 {
  16      if (buf == NULL || length <= 0)
  17     {
  18          printf ( "parameter is error!\n" );
  19          return  -1;
  20     }
  21                                                                                                                                           
  22      int  left = 0;
  23      int  right = length - 1;
  24      int  mid = 0;
  25 
  26      while (right > left)
  27     {
  28          if ( (right - left) == 1)
  29         {
  30              break ;
  31         }
  32 
  33         mid = left + (right - left) / 2;
  34          if (buf[mid] >= buf[left])
  35         {
  36             left = mid;
  37         }
  38          else  if (buf[mid] <= buf[right])
  39         {
  40             right = mid;
  41         }
  42     }
  43 
  44      return  buf[right];
  45 }




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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  /****************************************                                                                                                 
   2     > File Name:test.c
   3     > Author:xiaoxiaohui
   4     > mail:1924224891@qq.com
   5     > Created Time:2016年05月23日 星期一 20时07分13秒
   6 ****************************************/
  
  
  
  10  /*这是典型的类二分查找算法,只要找到分间线,就是其中最下的元素*/
  11 
  12 #include<stdio.h>
  13 
  14  int  min( int  *buf,  int  length)
  15 {
  16      if (buf == NULL || length <= 0)
  17     {
  18          printf ( "parameter is error!\n" );
  19          return  -1;
  20     }
  21 
  22      int  left = 0;
  23      int  right = length - 1;
  24      int  mid = 0;
  25 
  26      while (right > left)
  27     {
  28          if ( (right - left) == 1)
  29         {
  30              break ;
  31         }
  32 
  33         mid = left + (right - left) / 2;
  34 
  35          if (buf[right] == buf[left] && buf[left] == buf[mid])    //顺序查找
  36         {
  37              for ( int  i = left; i <= right; i++)
  38             {
  39                  if (buf[left] > buf[i])
  40                 {
  41                      return  buf[i];
  42                 }
  43             }
  44         }
  45 
  46          if (buf[mid] >= buf[left])
  47         {
  48             left = mid;
  49         }
  50          else  if (buf[mid] <= buf[right])
  51         {
  52             right = mid;
  53         }
  54     }
  55 
  56      return  buf[right];
  57 }









本文转自 ye小灰灰  51CTO博客,原文链接:http://blog.51cto.com/10704527/1783636,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Java
【剑指offer】-旋转数组的最小数字-06/67
【剑指offer】-旋转数组的最小数字-06/67
|
4月前
每日一题——旋转数组的最小数字(II)
每日一题——旋转数组的最小数字(II)
|
5月前
|
Java
每日一题《剑指offer》数组篇之旋转数组的最小数字
每日一题《剑指offer》数组篇之旋转数组的最小数字
23 0
每日一题《剑指offer》数组篇之旋转数组的最小数字
|
5月前
牛客网-旋转数组的最小数字
牛客网-旋转数组的最小数字
17 0
|
5月前
剑指Offer LeetCode 面试题11. 旋转数组的最小数字
剑指Offer LeetCode 面试题11. 旋转数组的最小数字
23 0
|
8月前
剑指offer-10.旋转数组最小的数字
剑指offer-10.旋转数组最小的数字
29 0
|
11月前
剑指Offer - 面试题11:旋转数组的最小数字
剑指Offer - 面试题11:旋转数组的最小数字
48 0
|
11月前
|
算法
剑指offer 10. 旋转数组的最小数字
剑指offer 10. 旋转数组的最小数字
35 0
|
11月前
剑指offer_数组---旋转数组的最小数字
剑指offer_数组---旋转数组的最小数字
32 0
|
算法 Java
旋转数组的最小数字(剑指offer 11)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
旋转数组的最小数字(剑指offer 11)