微软100题(69)旋转数组中的最小元素(数组、算法)
2015-06-10 10:15
441 查看
旋转数组中的最小元素(数组、算法)。
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,
输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
思路:数组被分成两段有序的,找到分界线就好,可以用二分法找分界线
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,
输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
思路:数组被分成两段有序的,找到分界线就好,可以用二分法找分界线
int FindMinInOrder(int* number,int length) { int answer = number[0]; for (int i =1;i<length;++i) { if(number[i]<answer) answer = number[i]; } return answer; } int FindMinInShfitArray(int* number,int length) { if(number==NULL || length<=0) throw new exception("error input"); int left= 0; int right = length-1; int mid = 0; while(number[left]>=number[right]) { if(right-left==1)//right为分界线 { mid = right; break; } mid = (left + right)/2; // 1 0 1 1 1特殊情况,左 中 右 都相等,无法直接移动left到mid位置 if(number[left]==number[mid] && number[right]==number[mid]) return FindMinInOrder(number,length); if(number[left]>=number[mid]) left = mid; else if(number[right]>=number[mid]) right = mid; } return number[mid]; }
相关文章推荐
- Bootstrap之Button.js
- UIWebView和UIWebViewDelegate的基本用法 (转)
- CRAMFS镜像制作
- PHP 多维数组
- onNewIntent何时会被执行 以及 Android任务和返回栈解析
- 人脸姿态识别
- 关于工资的三个秘密
- 在多台PC之间同步Resharper所有设置的方法
- web开发错误
- Check Memory Leak
- 使用API将AR收款不明入金转为未核销状态
- jqGrid学习总结_1 获取或设置行及单元格的值
- table表格简单样式设置
- oracle 两表之间字段赋值错误解析
- Android开发 屏蔽Button setClickable和setEnabled
- Android中图片适配屏幕问题
- PHP实现将textarea的值根据回车换行拆分至数组
- java实现文本框和文本区的输入输出
- cuda编程实践-2
- 使用OPENCV训练手写数字识别分类器