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,如需转载请自行联系原作者

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

  1. 剑指offer系列-03.数组中的重复数字

    剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  2. 《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现

    文章目录: 1.题目描述 2.解决方案 (1)HashSet方法解决 (2)哈希思想(巧解) 3.参考 1.题目描述 找出数组中重复的数字.         在一个长度为 n 的数组 nums 里的所 ...

  3. 剑指offer (03):数组中重复的数字 (C++ Python 实现)

    1 题目一 找出数组中重复的数字 1.1 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...

  4. 【剑指offer】_15数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  5. 【剑指offer】登峰造极--数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  6. 剑指Offer面试题:6.旋转数组中的最小数字

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

  7. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  8. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  9. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

最新文章

  1. centos快速安装cacti
  2. 黑马lavarel教程---6、简单验证
  3. SQLServer 2005删除无主键表中的重复项
  4. sublime java cmd_在sublime text3设置java环境
  5. 端到端O-RAN用例测试
  6. python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
  7. pythonic风格_【Python】性能优化之Pythonic风格化代码
  8. java异或_干货:Java异或运算符的使用方法
  9. 深度图像确定目标距离_技术交流一种距离选通水下激光成像系统设计与实验研究...
  10. 六度分离 HDO 1869 Floyd
  11. 海尔简爱s11装Linux,海尔简爱S11值得买吗 海尔简爱S11全面深度评测详解
  12. cocoscreator getSpriteFrame is not a function 问题
  13. linux网络接口lo,linux网络接口介绍
  14. 调用百度OCR接口识别身份证 微信小程序
  15. 批量把大量图片名称批量导入记事本或excel表格里(生成图片名目录)
  16. springBoot雷神教程学习笔记
  17. TDSQL | TXSQL 数据库内核与特性
  18. Python如何实现一步一步查看程序之代码调试-B04
  19. android xml msgid,Android挂逼修练之行–微信聊天消息修改器插件开发详解
  20. java.lang.NullPointerException com.enjoy.book.action.UserServlet.doPost(UserServlet.java:46)

热门文章

  1. flash我中学时的梦想
  2. C#相等性 - 三个方法和一个接口
  3. dubbo负载均衡代码分析1(leastactive策略)
  4. Winform软件,不要在线程里操作UI
  5. 实现类似美团的下拉分级式菜单
  6. Linux基本命令之date命令的参数及获时间戳的方法
  7. 交换机IP-MAC地址绑定
  8. mysql 取消密码警告
  9. Java排序之归并排序
  10. python 生成器迭代器