程序员面试题--旋转数组中的拐点元素
来源:互联网 发布:淘宝手淘搜索一下爆 编辑:程序博客网 时间:2024/06/06 22:08
题目:把一个有序数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。例如数组A={1,2,3,4,5,6},旋转后得B={3,4,5,6,1,2},该数组的最小值为1。现在输入递增数组的旋转,输出旋转数组的最小值。
针对上面的问题,我们很清楚的知道,输入数组的前半部分和后半部分都是有序的,并且前半部分>=后半部分。根据这样的特性我们就行写出代码。
//求出一个数组中的拐点 length是数组的长度int getDot(int data[],int length){if(data==NULL)return 0;int i=0,j=length-1;int flag=false;while(i<j){if(data[i]>data[j]){i++;}else if(data[i]<data[j]){j--;}else if(data[i]==data[j]){i++;j--;}return i;}上面返回的是拐点的位置。
这样写有没有问题呢?
下面我们来写个测试用例你就知道了!
比如A={1,1,1,1,0,0,1}; 你会发现输出的位置是5,不是第一个0的位置。
我们要怎么来完善上面的程序呢?
如下:
//求出一个数组中的拐点 length是数组的长度int getDot(int data[],int length){if(data==NULL)return 0;int i=0,j=length-1;int flag=false;while(i<j){if(data[i]>data[j]){i++;}else if(data[i]<data[j]){j--;}else if(data[i]==data[j]){i++;j--;flag=true;}if(flag&&data[i]<data[i-1])//一旦发现这个情况,就使我们找的拐点,这个也考虑了重复情况return i;}return i;}flag用于判断数组中的是否有相同的元素。
这样基本上就完善了!
如有问题请批评指正哈!
- 程序员面试题--旋转数组中的拐点元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素[算法]
- 面试题8:旋转数组中的最小值
- 面试题:旋转数组
- 面试题精选(75):经过旋转的有序数组中的元素查找(要求复杂度为O(lgn))
- 面试题8 求旋转后(3 4 5 1 2)的数组中的最小元素
- 面试题8:旋转数组中的最小数字
- 【剑指offer】面试题8:旋转数组中的最小值
- 【面试题】寻找旋转排序数组中的最小值
- 剑指offer-面试题8:旋转数组中的最小数字
- 【剑指offer】面试题8:旋转数组中的最小数字
- 面试题--数组旋转续
- 面试题90:旋转数组
- [经典面试题]输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
- java_正则表达式pattern类Matcher类_(字符串匹配)
- 一个URL编码和解码的C++类
- FZU 2087 统计树边
- 函数的运用
- 关于VS2005通过“添加变量”向导来添加控件变量时出现“控件变量”被禁用的处理办法!
- 程序员面试题--旋转数组中的拐点元素
- C++进行base64编码和解码
- MOSS 2010:Visual Studio 2010开发体验(21)——使用Business Connectivity Service(BCS)集成业务系统
- .vimrc使能鼠标后,vim鼠标右键不能复制
- 解决:org.hibernate.annotationexception no identifier specified for entity
- MyEclipse使用技巧
- 数据库死锁的原因
- C# 定时器使用
- NYOJ228士兵杀敌(五)