旋转数组最小数字
2015-08-04 15:59
363 查看
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转, 输出旋转数组的最小元素。 例如数组 { 3,4,5,1,2 } 为{ 1,2,3,4,5 }的一个旋转, 该数组的最小值为1。
code:
code:
[code]int Min(int* numbers, int length) { if (numbers == NULL || length < 0) { throw invalid_argument("Invalid parameters"); } int low = 0; int high = length - 1; int mid = 0; //如果是原序列 while (numbers[low] >= numbers[high]) { // 如果index1和index2指向相邻的两个数, // 则index1指向第一个递增子数组的最后一个数字, // index2指向第二个子数组的第一个数字,也就是数组中的最小数字 if (high - low == 1) { mid = high; break; } mid = (low + high) / 2; // 如果下标为index1、index2和indexMid指向的三个数字相等, // 则只能顺序查找 if (numbers[mid] == numbers[low] && numbers[mid] == numbers[high]) { numbers[mid] = MinInOrder(numbers, low, high); break; } if (numbers[mid] >= numbers[low]) low = mid; else if(numbers[mid] <= numbers[high]) { high = mid; } } return numbers[mid]; } int MinInOrder(int* numbers, int low, int high) { int result = numbers[0]; for (int i = low+1; i <= high; i++) { if (numbers[i] < result) { result = numbers[i]; } } return result; }
相关文章推荐
- C#日期时间格式化
- 嵌入式LINUX入门到实践(二)
- PHP学习(变量)
- canvas学习之制作动画
- iOS培训-oc类
- c/c++内存泄露
- 初学Android Fragment
- struts2的核心和工作原理
- Spring 总结(一)
- 【Unity Shader实战】卡通风格的Shader(二)
- HYSBZ 1821 Group 部落划分 Group
- 对象和类
- XMPP协议实现原理介绍
- C和C++易出现的低级错误
- 用Git管理Unity项目
- javascript将DOM节点添加到文档的方法实例分析
- POODLE Vulnerability: Padding Oracle on Downgraded Legacy Encryption
- Base分享系列(1)
- GBDT源码分析和注释
- CDN(内容分发网络)