剑指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
|
1 /****************************************
2 > File Name:test.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月23日 星期一 20时07分13秒
6 ****************************************/
7
8
9
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
|
1 /****************************************
2 > File Name:test.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月23日 星期一 20时07分13秒
6 ****************************************/
7
8
9
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 }
|
剑指Offer之旋转数组中的最小数字(题8)相关推荐
- 剑指offer系列-03.数组中的重复数字
剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- 《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现
文章目录: 1.题目描述 2.解决方案 (1)HashSet方法解决 (2)哈希思想(巧解) 3.参考 1.题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所 ...
- 剑指offer (03):数组中重复的数字 (C++ Python 实现)
1 题目一 找出数组中重复的数字 1.1 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...
- 【剑指offer】_15数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 【剑指offer】登峰造极--数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 剑指Offer面试题:6.旋转数组中的最小数字
一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1, ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
最新文章
- centos快速安装cacti
- 黑马lavarel教程---6、简单验证
- SQLServer 2005删除无主键表中的重复项
- sublime java cmd_在sublime text3设置java环境
- 端到端O-RAN用例测试
- python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
- pythonic风格_【Python】性能优化之Pythonic风格化代码
- java异或_干货:Java异或运算符的使用方法
- 深度图像确定目标距离_技术交流一种距离选通水下激光成像系统设计与实验研究...
- 六度分离 HDO 1869 Floyd
- 海尔简爱s11装Linux,海尔简爱S11值得买吗 海尔简爱S11全面深度评测详解
- cocoscreator getSpriteFrame is not a function 问题
- linux网络接口lo,linux网络接口介绍
- 调用百度OCR接口识别身份证 微信小程序
- 批量把大量图片名称批量导入记事本或excel表格里(生成图片名目录)
- springBoot雷神教程学习笔记
- TDSQL | TXSQL 数据库内核与特性
- Python如何实现一步一步查看程序之代码调试-B04
- android xml msgid,Android挂逼修练之行–微信聊天消息修改器插件开发详解
- java.lang.NullPointerException com.enjoy.book.action.UserServlet.doPost(UserServlet.java:46)