旋转数组的最小元素
来源:互联网 发布:图章设计软件 编辑:程序博客网 时间:2024/05/22 07:05
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
解题:类似二分查找,使用两个指针:left ,right 指向一前一后,一般情况下arr[left]一定大于等于arr[right],除非排序好的数组本身没动过
再使用mid=(left+right)/2 这样,如果 arr[mid]如果>=arr[left]说明在最小值在mid之后,否则在mid之前(包含mid本身)。更新left ,right,继续查找,直到left == right
so the code is as follows:
#include <stdio.h>#include <stdlib.h>#include <assert.h>int findMinOfRotateArray(int arr[],int len){int left=0,right=len-1,mid=left;assert(arr != NULL && len >0);if(len==1) return arr[0]; //make sure left > rightwhile(arr[left] >= arr[right]){mid=(left+right)>>1;if(arr[mid]>=arr[left]){left=mid+1;}else{right=mid;}if(left == right){break;}}return arr[left];}int main(void) {int arr[]={1,1,2,3,4,5,6,6,-1,0,0,1};printf("find it:%d\n",findMinOfRotateArray(arr,sizeof(arr)/sizeof(int)));return 0;}
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 旋转数组的最小元素
- 找出旋转数组的最小的元素
- 旋转数组的最小元素--总结
- 面试训练旋转数组的最小元素
- 剑指offer- 旋转数组的最小元素
- 找出旋转数组中最小的元素
- 旋转数组中的最小元素
- 旋转数组中的最小元素。
- 旋转数组中的最小元素
- java 序列化到.ser文件
- hdu 3394 (无向图求块 判断环)
- mootools这样才能获得影藏的div的高度
- cramfs and yaffs介绍
- 分享一款Flash三维物体展示的播放器软件
- 旋转数组的最小元素
- 数据类型的归纳
- 个人服务器搭建
- wince5.0 +SQlite 的基本操作
- springCollectionInject record
- Linux下统计某个目录文件数目
- Kernel32.dll对外提供的方法
- linux内核 address_space 结构
- Dropbox推出双重验证 信任是云存储的发展关键