剑指Offer06 旋转数组的最小值
/*************************************************************************
> File Name: 06_MinNumberInRotatedArray.c
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年08月29日 星期一 20时14分22秒
************************************************************************/ #include <stdio.h>
#include <stdlib.h> // O(n)解法
int minNumberInRotatedArray1(int* rotatedArray, int length)
{
if (length <= )
return ; for (int i = ; i < length; ++i)
{
if ( rotatedArray[i] < rotatedArray[i-])
return rotatedArray[i];
}
return rotatedArray[];
} // O(log(n))解法
int minNumberInRotatedArray2(int* rotatedArray, int length)
{
if (length <= )
return ;
if (length == )
return rotatedArray[];
int left = ;
int right = length - ;
int middle = ; if (rotatedArray[left] < rotatedArray[right])
return rotatedArray[]; while (rotatedArray[left] >= rotatedArray[right])
{
if (right - left == )
{
middle = right;
break;
}
middle = (left + right) / ; // 如果left、right、middle的值相同,只能顺序查找
if (rotatedArray[left]==rotatedArray[middle]
&& rotatedArray[middle]==rotatedArray[right])
{
for (int i = left+; i < right; ++i)
{
if (rotatedArray[i] < rotatedArray[i-])
return rotatedArray[i];
}
return rotatedArray[left];
} if (rotatedArray[middle] >= rotatedArray[left])
left = middle;
else if (rotatedArray[middle] <= rotatedArray[right])
right = middle;
}
return rotatedArray[middle];
} int main()
{
int rotatedArray1[] = {,,,,,,};
int rotatedArray2[] = {,,,,,,};
int rotatedArray3[] = {,,,,,,};
int rotatedArray4[] = {,,,,,,,,,}; int length1 = ;
int length2 = ; int ret1, ret2; ret1 = minNumberInRotatedArray1(rotatedArray1, length1);
ret2 = minNumberInRotatedArray2(rotatedArray1, length1);
printf("ret1 is %d, ret2 is %d\n", ret1, ret2);
ret1 = minNumberInRotatedArray1(rotatedArray2, length1);
ret2 = minNumberInRotatedArray2(rotatedArray2, length1);
printf("ret1 is %d, ret2 is %d\n", ret1, ret2);
ret1 = minNumberInRotatedArray1(rotatedArray3, length1);
ret2 = minNumberInRotatedArray2(rotatedArray3, length1);
printf("ret1 is %d, ret2 is %d\n", ret1, ret2);
ret1 = minNumberInRotatedArray1(rotatedArray4, length2);
ret2 = minNumberInRotatedArray2(rotatedArray4, length2);
printf("ret1 is %d, ret2 is %d\n", ret1, ret2); return ;
}
剑指Offer06 旋转数组的最小值的更多相关文章
- 剑指Offer 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- 剑指offer 旋转数组
class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { //常规的遍历方法时间是O(N ...
- 剑指Offer——旋转数组的最小数字
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...
- 剑指offer-7.旋转数组的最小数字
看起来不需要用二分法查找 --------------------------------------------------------- 时间限制:3秒 空间限制:32768K 热度指数:5098 ...
- 剑指Offer-6.旋转数组的最小数字(C++/Java)
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...
- 用js刷剑指offer(旋转数组的最小数字)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- 剑指offer6:旋转数组的最小数字
1. 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...
- 剑指Offer_11_旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出一个旋转数组的最小元素. 例如: {3,4,5,1,2} 为 {1,2,3,4,5} ...
- 剑指offer8 旋转数组的最小数字
一种错误写法: class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { int len ...
随机推荐
- 待整理 - BAT文件编写
BAT文件语法和技巧(bat文件的编写及使用) http://www.jb51.net/article/5828.htm
- 计数排序详解以及java实现
前言 我们知道,通过比较两个数大小来进行排序的算法(比如插入排序,合并排序,以及上文提到的快速排序等)的时间复杂度至少是Θ(nlgn),这是因为比较排序对应的决策树的高度至少是Θ(nlgn),所以排序 ...
- Session的实现与存储
[集群中session安全和同步] 使用数据库来保存session,就算服务器宕机了也没事,session照样在. 每次请求都进行数据库读写开销不小(使用内存数据库可以提高性能,宕机就会丢失数据. ...
- js 基于函数伪造的方式实现继承
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Ehcache(08)——可阻塞的Cache——BlockingCache
http://haohaoxuexi.iteye.com/blog/2119737 可阻塞的Cache—BlockingCache 在上一节我们提到了显示使用Ehcache锁的问题,其实我们还可以隐式 ...
- 新浪微博SSO登陆机制
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 用javascript实现简体和繁体字间的转换
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- .NET连接SAP系统专题:SAP中新建可远程调用的RFC(二)
何谓RFC,就是一个Function,可以被非SAP系统调用,比如VB,C#,Java等.如果我们在RFC中INCLUDE了相关的业务逻辑,那么我们就可以完全操控SAP中的业务数据了.就像在TTE里, ...
- BZOJ 1014: [JSOI2008]火星人prefix Splay+二分
1014: [JSOI2008]火星人prefix 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1014 Description 火星人 ...
- QT 操作数据库
整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...