剑指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 ...
随机推荐
- 电子图书的编目和OPAC揭示
摘 要 步入数字图书馆时代,电子资源日益增多,尤其在高校图书馆更加迅猛,怎样将图书馆的电子资源尽可能地整合在OPAC系统的检索功能里,以便更加简便.直观地利用,电子图书的编目已成为重要研究课题.本 ...
- RFID FDX HDX Technology
Got a tough RF environment? Turn to TI’s proven LF technology TI’s low-frequency (LF) technology has ...
- 用一个I/O口控制1个三色指示灯, 2个单色指示灯
http://www.baiheee.com/Documents/081207/081207184434.htm http://www.baiheee.com/Documents/081207/081 ...
- 修改MyEclipse内存-------OutOfMemoryError错误
1.打开MyEclipse后,进入Windows/Preferences/Java/Installed JREs 点击后,在右边窗口选择JREs,双击后进入 2.在Default VM Argumen ...
- Swift学习笔记八
函数 Swift的函数语法非常独特,也提供了很高的灵活性和可读性.它可以充分表达从简单的无参数C风格函数到复杂的拥有局部变量和外部变量的OC风格的方法.参数可以有默认值,方便函数的调用.Swift中的 ...
- ssh 命令行通过私钥登录其它设备
ssh -i root(私钥文件) root@IP (被访问的服务器IP) 这里备份一下了
- C#后台程序与HTML页面中JS方法互调(功能类似于Ajax中的DWR)
此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...
- SRM 449 div1 (practice)
250pt: 暴力枚举所有的可能的情况就好了,求面积的时候我是用梯形的面积减去两个三角形的面积.. 550pt: 题意:给你一个蜂窝形状的特殊图形,有一些格子已经被占据了,问你将剩下的格子用1*2的砖 ...
- C++红旗之更短形式:500多字符且无法遵守原题规则
Purpose and Scope 研究五星红旗C++代码生成问题的代码压缩方法. 没有最短,仅仅有更短. 已经尽力了.爱因斯坦的三个小板凳里,我这是第四个. 继续深入压缩代码的方法肯定非常诡异了. ...
- 导入word数据
public static List<FL> ImportDOC(object fileName,out StringBuilder meg) { List<FL> ...