面试题--数组旋转续
来源:互联网 发布:软件的特点是什么 编辑:程序博客网 时间:2024/05/26 16:00
直接上题意了:给定N个数字的组成的递增串,现在使其向做或者向左或者向右旋转K位。问:找到数组中最小数的是多少?
方案一:
由于原串是递增串通过旋转得到的。故想都不用想就可以得到如下第一种解决方案
int Find(int n){for (int i = 0; i < n; i++){if (a[(i + n - 1) % n] > a[i]){return i;//找到前一个大于当前的元素,就可以确定我们所需要得到值的下标}}return 0;}
上一种方案是很容易想到的,但是如果N很大时就得不偿失了。我们仔细阅读题目,可以知道,原串是递增的,通过旋转得到。因此,我们可以使用二分。使用二分的过程中,我们会使用到left,right,mid,因此我们可以分为3种情况讨论。
1.当前位置mid就是最小的位置,直接返回mid;
2.a[mid] > a[right],则是right = mid + 1;
3.当前两种都不满足时,left = mid - 1.
稍微说明下:由于,原串升序,向左移动K位,那么后K位怎么都不会大于前面的数字。否则就违背了递增串了。当然K < N。
int search(int left, int right, int n)//n为元素个数{int mid = 0;while (left < right){mid = (left + right) / 2;if (a[mid] < a[(mid - 1 + n) % n ])//找到最小的位置{return mid;}else if (a[mid] > a[right])//判断在右边块{left = mid + 1;}else right = mid - 1;//左边块}return left;}至此,暂时想到两种解决方案,欢迎补充新想法。
0 0
- 面试题--数组旋转续
- 面试题:旋转数组
- 面试题90:旋转数组
- 剑指offer面试题8--数组旋转
- 面试题8:数组的旋转
- 面试题:旋转数组的最小数字
- web前端面试题 数组旋转
- 面试题8:旋转数组中的最小值
- 程序员面试题--旋转数组中的拐点元素
- 面试题8:旋转数组的最小数字 ***
- 面试题8:旋转数组中的最小数字
- 【面试题八】旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- 【剑指offer】面试题8:旋转数组中的最小值
- 【剑指offer】面试题8:旋转数组的最小数字
- 剑指offer面试题8:旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 面试题8:旋转数组的最小数字
- Jenkins build失败的条件
- WebService原理
- 单列索引列与单列索引列为首的组合索引列需要同时建在表上吗?
- ZOJ-1404
- STM32中NVIC(嵌套向量中断控制)的理解
- 面试题--数组旋转续
- OCP 1Z0 051 QUESTION NO: 15
- Linux环境编程之IPC进程间通信(二):管道
- Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
- python简单速度测试
- python --enumerate用法
- Java 九九乘法
- 数据结构之二叉树基础知识总结
- Java数据库连接池封装与用法